Wix 3.6 Burn:非托管自定义UI

时间:2012-04-24 15:46:17

标签: wix windows-installer burn

我想将多个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,没有安装软件,也没有错误消息。

知道我可能做错了吗?

1 个答案:

答案 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相同的文件夹中。