installation - WiX 工具集:如何根据在同一捆绑包中早期安装程序中所做的选择运行捆绑包中的安装程序?
问题描述
如果用户选择安装需要这些第 3 方依赖项的软件组件,我试图实现的是一种仅在捆绑包中安装特定第 3 方依赖项的方法。
我们更具体的用例:在捆绑包中,我们首先为我们自己的软件运行自定义安装程序,用户可以在其中选择他们需要的功能。用户可能会选择安装一个使用激光扫描仪来检测事物的软件。如果用户确实选择了该选项,则应稍后在捆绑包中安装第 3 方激光扫描仪配置器软件。
到目前为止,我尝试的是在util:FileSearch
元素中添加以下Bundle
元素:
<util:FileSearch Id="CheckOurSoftwareExists"
Path="[WindowsVolume]\Company\Software\OurSoftware\OurSoftware.exe"
Variable="OURSOFTWAREEXISTS"
Result="exists" />
并在ExePackage
元素内部的Chain
元素中使用它:
<ExePackage Id="LaserScannerConfiguratorInstaller"
SourceFile="3rd-party-installers\path\to\laser-scanner-configurator-installer.exe"
InstallCondition="OURSOFTWAREEXISTS" />
这不起作用,因为util:FileSearch
据说在任何捆绑安装程序启动之前已经执行。即使InstallCondition
在第 3 方安装程序启动之前对属性进行评估,该变量OURSOFTWAREEXISTS
也已经在之前被赋予了一个值。
那么对于这个问题有哪些解决方法呢?
解决方案
仍然使用 MSI Native UI 是您问题的核心。WiX 开发团队不建议这样做。
如果您禁用您的本机 MSI UI 并让用户在引导程序 UI 中做出选择,您可以使用它作为安装或不安装 EXE 包的条件,并将属性传递给您的 MSI 以控制安装哪些功能。
否则,我怀疑您必须编写一个自定义引导程序应用程序,该应用程序在安装 MSI 后重新评估属性并重新计算要安装的软件包的成本。
我想一个快速丑陋的黑客将是为读取机器的 EXE 编写一个自定义的 EXE 包装器,以查看是否安装了该功能,并选择调用真正的 EXE 或退出而不安装它。
推荐阅读
- mysql - 在 SQL 中使用括号对条件值进行分组
- node.js - Nodejs 承诺 - 按顺序从异步函数组成一个管道,支持提前退出
- azure - 使用 Azure 服务总线队列中的分区键检索消息
- go - 即使 -benchtime=1x,为什么 go Benchmark 函数运行不止一次?
- php - 将参数作为数组传递给原生 PHP 函数,以使用 symfony/process 之类的库在后台启动进程
- angular - Webpack 5 与旧 Angular 版本的模块联合
- objective-c - 以编程方式从 OSX 上的垃圾箱中恢复文件
- c# - 如何使用工厂模式和 Microsoft.Extensions.DependencyInjection 注册多个实现
- aws-lambda - 如何为 Alexa 技能调用配置 MQTT (AWS IoT) 测试控制台?
- mongodb - Quarkus mongodb 和 oraccle 在同一个项目中