从捆绑的 MSI 设置 WiX 刻录引导程序变量?

Set a WiX burn bootstrapper variable from a bundled MSI?

我们有一个 burn bootstrapper bundle,它安装了一堆先决条件,启动我们的主要安装,然后静默运行一些扩展安装程序。我们最近不得不向安装包中添加几个新组件,这两个组件都需要已经从安装早期启动的其他产品中收集到的配置信息。所以基本上:

  1. 安装包 1 并显示 UI。它要求提供服务用户和密码。
  2. 包 2 已添加到我们的包中。它还需要一个服务用户和密码,与包 1 相同。
  3. 包 3 已添加到我们的包中。它还需要一个服务用户和密码,与包 1 相同。

我们希望避免让用户多次配置相同的信息。我们看到的一种可能的解决方案是编写我们自己的 WiX 引导程序应用程序,但这似乎相当繁琐。我们考虑的另一种可能性是,也许有一种方法可以让 package one 调用自定义操作来设置 burn 变量的值。然后我们可以调用包二和三的安装程序,将 burn 变量作为静默安装命令行的一部分传入。有没有办法做到这一点?如果是这样,它涉及什么?

我们最终确实找到了解决方案,利用了 Neil Sleightholm 的 extended bootstrapper application。这允许在引导程序中创建自定义操作。我们创建了一个 WiX 刻录自定义操作,它在 OnDetect 中启动一个单独的线程。该线程打开一个命名管道并侦听要发送的变量名称和值对:当它获得这样的一对时,它使用引擎的 SetVariableValue 命令来设置值。在调用的安装中,我们创建了一个自定义操作,它连接到命名管道并根据它收集的内容发送变量名称和值。变量的新值成功传递给后续安装,但是在启动任何安装之前评估安装条件,因此这些不能使用其值由安装设置的变量。