我使用Wix 3.5 Votive(visual studio集成)爲某些COM對象創建安裝程序。獲取Wix Votive註冊COM對象
在Votive中,設置項目引用會從該項目中獲取二進制文件,並在編譯時自動生成Wix源文件。這非常棒,它是乾的,意味着我不必不斷更新Wix XML。 Votive生成的片段如下所示:
<Fragment>
<DirectoryRef Id="INSTALLLOCATION">
<Component Id="cmpBCE83EAB1AAF2230E306A7325EE7EA11" Guid="*">
<File Id="fil61D40E7D1A1D0A60C27CE6960FED2B0B" Source="$(var.My.Assembly.TargetDir)\My.Assembly.dll" />
</Component>
</DirectoryRef>
</Fragment>
它對源文件,文檔和衛星也是如此,我沒有使用它們。然而,它沒有做的是爲COM註冊生成註冊表實體(該程序集標記爲'COM Visible'和'註冊COM Interop',但Votive似乎沒有處理這種機制。
Votive在幕後調用了Heat.exe來收集所有這些東西,並且在組件上調用Heat時會吐出一個包含<Class .../>
和<RegistryValue .../>
條目的文件,這正是COM註冊所需要的。足夠的話,Heat可以生成這些東西,這樣做很簡單,並且可以將輸出編輯到Wix項目中。但是,這違反了DRY原則,並且需要手動將Wix項目與源代碼保持一致。有點切線,我寧願讓Votive/MSBuild自動完成這項工作,每次解決方案都會建立。
我不是任何MSBuild專家,我正在與Wix,Votive和MSBuild進行大規模的學習。我花了幾天時間才達到目標。所以,我的問題是:每當解決方案建立時,Votive/MSBuild生成此COM註冊東西是否有直接的方法?我預計對於每個引用的項目,如果設置了「Register for COM Interop」選項,那麼Votive/MSBuild將爲該項目的輸出組件生成COM註冊內容。有沒有人做到這一點,如果是的話,請在我的大腦變成果凍之前,給我一個援助之手!
我完全明白你的觀點,但我的方法是由客戶的要求決定的,我的情況表明我儘可能簡化和儘可能自動化流程,我需要生成一個模板安裝項目,它可以很容易複製了許多項目,並由**缺乏經驗的愛好者程序員使用**告訴他們手動編輯他們的COM註冊將失敗Wix的學習曲線非常龐大,我無法對我的「客戶」造成這樣的影響因此,除非有人提出了更好的解決方案 – 2010-10-22 12:49:59
如果這是一款iPhone,但在Windows上它永遠不會發生,您可能有機會安裝很複雜,因爲底層平臺和技術堆棧很複雜。運行安裝嚮導很容易,寫一個不是。大多數開發人員討厭安裝,因爲它很難和無聊。如果任何人都可以用一個簡單的按鈕將它抽象出來,它就已經完成了。 – 2010-10-22 23:07:51
我一直拖着踢和尖叫到相同的結論。所以我接受了這個答案。 – 2011-11-09 23:06:23