WiX Toolset:如何在同一捆绑包中根据前序安装选择运行后续安装程序
可行解决方案如下:
你遇到的问题本质是WiX Burn 默认会在整个安装链启动前完成所有搜索逻辑,不会中途自动重跑,只要手动指定搜索的执行时机即可解决,常用方案有两类:
方案1:最小改动产线方案(推荐)
- 首先修改你的自有软件自定义安装程序逻辑:用户勾选激光扫描仪相关功能时,安装完成后在固定注册表路径写入标识值,比如在
HKLM\Software\Company\OurSoftware\Features下写入DWORD类型的LaserScannerEnabled,值为1代表用户选了对应功能,未勾选则不写入或者写0。 - 然后在Bundle中调整搜索逻辑,给搜索项加
Before属性指定执行时机,让它在第三方安装包启动前再执行搜索:
<util:RegistrySearch Id="CheckLaserFeatureEnabled" Root="HKLM" Key="Software\Company\OurSoftware\Features" Value="LaserScannerEnabled" Variable="LASER_FEATURE_ENABLED" Result="value" Before="LaserScannerConfiguratorInstaller" Win64="yes" <!-- 如果你是64位软件需要加这个属性,避免搜错32位注册表节点 --> />
- 最后修改第三方安装包的安装条件:
<ExePackage Id="LaserScannerConfiguratorInstaller" SourceFile="3rd-party-installers\path\to\laser-scanner-configurator-installer.exe" InstallCondition="LASER_FEATURE_ENABLED = 1" />
方案2:自定义BA场景方案
如果你已经在使用自定义Bootstrapper Application,可以在自有软件安装完成的回调事件里直接给Burn变量赋值,无需额外写注册表:
- 在BA代码中监听自有软件包的安装完成事件,判断用户选择的功能后,调用
Engine.SetVariable("LASER_FEATURE_ENABLED", true)手动设置变量值,后续第三方包直接用这个变量做安装条件即可。
内容的提问来源于stack exchange,提问作者lassi
相关产品推荐
相关产品推荐

