我正在尝试实现的是一种方法,如果用户选择安装需要第三方依赖项的软件组件,则只在捆绑包中安装特定的第三方依赖项。
我们更具体的用例:在捆绑包中,我们首先为我们自己的软件运行一个自定义安装程序,其中用户选择他们需要的功能。用户可以选择安装一个使用激光扫描仪来检测事物的软件。如果用户确实选择了该选项,则应稍后在捆绑包中安装第三方激光扫描仪配置器软件。
到目前为止,我尝试的是在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属性,变量OURSOFTWAREEXISTS之前也已经被赋予了一个值。
那么,对于这个问题有哪些解决方法呢?
发布于 2021-09-22 16:53:10
使用MSI Native UI仍然是问题的核心。WiX开发团队不建议这样做。
如果禁用本机MSI UI并让用户在引导程序UI中进行选择,则可以将其用作安装EXE包或不安装EXE包的条件,并将该属性传递给MSI以控制安装哪些功能。
否则,我怀疑您必须编写一个自定义引导程序应用程序,该应用程序在安装MSI之后重新评估属性,并重新启动要安装的包。
我认为一个快速丑陋的技巧是为EXE编写一个自定义的EXE包装器,该包装器读取机器以查看是否安装了该功能,并选择调用真正的EXE或不安装它而退出。
https://stackoverflow.com/questions/69282789
复制相似问题