【问题标题】:WiX toolset: How run an installer in a bundle based on choices made in an earlier installer in the same bundle?WiX 工具集:如何根据在同一捆绑包中早期安装程序中所做的选择运行捆绑包中的安装程序?
【发布时间】:2021-09-22 10:52:18
【问题描述】:

如果用户选择安装需要这些第 3 方依赖项的软件组件,我试图实现的是一种仅在捆绑包中安装特定第 3 方依赖项的方法。

我们更具体的用例: 在捆绑包中,我们首先为我们自己的软件运行自定义安装程序,用户可以在其中选择他们需要的功能。用户可能会选择安装一个使用激光扫描仪来检测事物的软件。如果用户确实选择了该选项,则应稍后在捆绑包中安装第 3 方激光扫描仪配置器软件。

到目前为止,我尝试的是在 Bundle 元素中添加以下 util:FileSearch 元素:

<util:FileSearch Id="CheckOurSoftwareExists"
                 Path="[WindowsVolume]\Company\Software\OurSoftware\OurSoftware.exe"
                 Variable="OURSOFTWAREEXISTS"
                 Result="exists" />

并在Chain 元素内的ExePackage 元素中使用它:

<ExePackage Id="LaserScannerConfiguratorInstaller"
            SourceFile="3rd-party-installers\path\to\laser-scanner-configurator-installer.exe"
            InstallCondition="OURSOFTWAREEXISTS" />

这不起作用,因为util:FileSearch 应该在任何捆绑安装程序启动之前已经执行。即使 InstallCondition 属性在第 3 方安装程序启动之前被评估,变量 OURSOFTWAREEXISTS 之前已经被赋予了一个值。

那么对于这个问题有哪些解决方法呢?

【问题讨论】:

  • 特征选择发生在引导程序 ui 还是 msi ui 中?
  • @ChristopherPainter 功能选择目前正在 MSI UI 中进行。

标签: installation wix


【解决方案1】:

仍然使用 MSI Native UI 是您问题的核心。 WiX 开发团队不建议这样做。

如果您禁用您的本机 MSI UI 并让用户在引导程序 UI 中做出选择,您可以将其用作安装或不安装 EXE 包的条件,并将属性传递给您的 MSI 以控制安装哪些功能。

否则我怀疑您必须编写一个自定义引导程序应用程序,在安装 MSI 后重新评估属性并重新计算要安装的软件包。

我想一个快速丑陋的 hack 是为 EXE 编写一个自定义的 EXE 包装器,它读取机器以查看该功能是否已安装,然后选择调用真正的 EXE 或不安装它就退出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多