2012-04-24 49 views
1

我想將多個MSI打包到一個安裝包中,因此我使用的是Wix3.6中的刻錄。Wix 3.6刻錄:非託管自定義UI

我想要一個簡單的用戶界面,允許選擇安裝哪個軟件包。

我瞭解標準BA(wixstdba.dll)不提供此功能,我需要編寫自己的BA。

作爲C++ BA的一個例子,我一直在研究'wix36-sources'包中的項目'wixstdba'。要開始我試圖簡單地去重建項目,並添加所產生的DLL到我的包如下:

<Bundle 
    Name="$(var.ProductName)" 
    Version="$(var.ProductVersion)" 
    Manufacturer="$(var.VendorName)" 
    UpgradeCode="$(var.UpgradeCode)" > 
    <BootstrapperApplication SourceFile="wixstdba.dll" /> 
    <Chain> 
    ... 

我成功地建立了捆綁:

light -ext WixBalExtension.dll -ext WixUIExtension -ext WixUtilExtension installer-v$(VERSION).wixobj -o installer-v$(VERSION).exe 

candle -o installer-v$(VERSION).wixobj bundle.wxs -d"Platform=x64" 

然而,當我運行生成的.exe文件, 什麼都沒發生。沒有UI出現,沒有安裝軟件,也沒有錯誤信息。

任何想法我可能做錯了什麼?

回答

2

當您運行.exe時,它應該在系統的%TEMP%文件夾中創建一個日誌文件。這應該告訴你是否遇到任何錯誤。文件名稱將是產品名稱(空格替換爲下劃線)。找到它的最簡單方法是打開Windows資源管理器窗口,爲文件夾名稱鍵入「%TEMP%」,然後按日期修改描述符進行排序。頂端的文件可能是正確的。

引導程序很可能正在運行,但是當它嘗試加載代碼時,它無法加載某些依賴項,或者有其他錯誤。希望日誌能夠爲你提供足夠的提示來找到問題。

如果你最終需要添加額外的庫/文件到您的BA使用,將它們添加到包有效載荷文件中,就像這樣:

 
    <BootstrapperApplicationRef SourceFile="wixstdba.dll" > 
    <Payload SourceFile="$(var.ReferencedProject.TargetDir)\file.needed.at.runtime" /> 
    </BootstrapperApplicationRef> 

這將文件放在同一文件夾中運行時解包的BA。