我想将多个MSI打包到一个安装包中,因此我使用的是Wix3.6中的Burn。
我希望有一个简单的用户界面,允许选择应安装哪些软件包。
我理解标准BA(wixstdba.dll)不提供此功能,我需要编写自己的BA。
我一直在关注'wix36-sources'软件包中的项目'wixstdba'作为C ++ BA的一个例子。为了开始,我尝试了简单地重建项目并将生成的DLL添加到我的Bundle中,如下所示:
<Bundle
Name="$(var.ProductName)"
Version="$(var.ProductVersion)"
Manufacturer="$(var.VendorName)"
UpgradeCode="$(var.UpgradeCode)" >
<BootstrapperApplication SourceFile="wixstdba.dll" />
<Chain>
...
我成功构建了Bundle:
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,没有安装软件,也没有错误消息。
知道我可能做错了吗?
答案 0 :(得分:2)
运行.exe时,它应该在系统的%TEMP%文件夹中创建一个日志文件。这应该告诉您是否遇到任何错误。文件名将是产品名称(空格替换为下划线)。找到它的最简单方法是打开Windows资源管理器窗口,为文件夹名称键入“%TEMP%”,然后按Date Modified desc排序。顶级文件可能是正确的。
引导程序可能正在运行,但是当它尝试加载代码时,它无法加载某些依赖项,或者出现其他错误。希望日志能够为您找到问题提供足够的提示。
如果您最终需要添加要由BA使用的其他库/文件,请将它们添加到bundle有效负载文件中,如下所示:
<BootstrapperApplicationRef SourceFile="wixstdba.dll" > <Payload SourceFile="$(var.ReferencedProject.TargetDir)\file.needed.at.runtime" /> </BootstrapperApplicationRef>
这将在运行时将文件放在与解压缩的BA相同的文件夹中。