1

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

知道我可能做错了什么吗?

4

1 回答 1

2

当您运行 .exe 时,它​​应该在系统的 %TEMP% 文件夹中创建一个日志文件。这应该告诉您是否遇到任何错误。文件名将是产品名称(空格替换为下划线)。找到它的最简单方法是打开 Windows 资源管理器窗口,键入“%TEMP%”作为文件夹名称,然后按修改日期 desc 排序。最上面的文件可能是正确的。

引导程序很可能正在运行,但是当它尝试加载您的代码时,它无法加载某些依赖项,或者有一些错误。希望日志能够为您提供足够的提示来找到问题。

如果您最终需要添加额外的库/文件供您的 BA 使用,请将它们添加到捆绑负载文件中,如下所示:

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

这将在运行时将文件放在与解压 BA 相同的文件夹中。

于 2012-08-13T20:29:19.737 回答