Wix 工具集 Bundle Chain 安装全局条件

Wix toolset Bundle Chain installation global condition

CONTEXT: 我创建了一个 Bootstrapper 安装程序,以便在需要时安装 .net Framework 4.8。连同我要交付的安装程序。

到这里为止一切正常:我的程序总是被安装,.net 只是在需要时安装。

问题是我需要向这个安装程序添加更多检查,例如检查注册表项(如果安装了另一个正确版本的程序),如果不满足条件,那么完整安装应该中止,不应安装任何内容。

问题: 我添加的 InstallCondition 仅影响 MsiPackage 但安装的其余部分似乎完全没问题,安装完成成功,这里是代码中有趣的部分:

<util:RegistrySearch Id="OtherProgramVersionId" Root="HKLM" Key="SOFTWARE\XXX\Install::Version" Variable="OtherProgramVersion"/>

<Chain>
  <PackageGroupRef Id="NetFx48Redist" />
  <MsiPackage 
    Id="MySuperProgram.Setup" 
    SourceFile="$(var.MySuperProgram.Setup.TargetPath)"
    InstallCondition="OtherProgramVersion >= v10.0"/>
</Chain>

如前所述,即使未找到注册表项或它不满足条件,安装似乎继续“成功”,我在控制面板->已安装的程序中找到它...但主要.msi 并没有真正安装! (检查目标文件夹,它是空的)

问题:如何添加全局条件以完全停止任何安装并向用户显示条件未满足的消息?如果可能,使用标准对话框。

我已经看到(并且我仍在经历)一些情况,但似乎它们只影响链中的一个项目......或者它们似乎以某种方式破坏了安装,我已经尝试添加到 .msi设置创建,文件 Product.wxs,为了中止此安装的条件,但是在安装时我得到这个未通过的条件作为设置错误,似乎退出根本不干净......甚至能够看到日志我在哪里看到这样的东西:

Error 0x80070643: Failed to install MSI package.

提前致谢!

如果您使用 WixStandardBootstrapperApplication,则可以使用 bal:Condition to define bundle-level conditions. The WiX documentation has a sample: https://wixtoolset.org/documentation/manual/v3/howtos/redistributables_and_install_checks/block_stdba_install_on_reg.html