2012-04-24 48 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。