当安装程序在卸载过程中 运行 时,如何防止 WIX 条件检测?

How to prevent the WIX condition detecting when the installer is running in the uninstalling process?

我正在学习 windows 安装程序 xml(WIX) 并且我的代码中有一个条件,它会在安装我的软件之前检查是否安装了软件 A。 我希望我的软件可以在安装软件-A 时安装,但是当我卸载我的软件时,不应触发这种情况。

bundle在安装过程中工作正常,这意味着如果已经安装了软件-A,它将继续安装。但如果软件-A 根本没有安装,bundle 将触发条件检查过程,显示条件消息并停止安装。我尝试了"NOT Installed"和"Installed"两种条件,但即使在卸载过程中,条件检查过程仍然会一直触发。这意味着无论进程是什么,包总是搜索相同的注册表。

安装程序的逻辑很简单,但我是 Windows 安装程序 xml 技术的初学者。

<bal:Condition Message="Software-A is Required.">
   <![CDATA[NOT Installed OR SoftwareAInstalled]]>
</bal:Condition>

<util:RegistrySearch Id="SoftwareAInstalled"
                 Root="HKLM"  
                 Key="SOFTWARE\SoftwareA\"
                 Variable="SoftwareAInstalled"
                 Result="exists" />

我想知道如何在安装程序卸载时阻止检查过程。或者任何其他建议将不胜感激。

我现在没有时间验证这个,但看起来你可以使用:

Installed OR SoftwareAInstalled

我会将后者大写 属性,但它可以在命令行中设置。我想它应该适用于你所拥有的。现在无法测试。提示:记得在silent installation modemodifyrepair[中测试=40=], self-repair, uninstall, major upgrade, etc... 很多要检查。

之前类似问题的一些回答:

  • How to add new framework version in Installment Requirement page of InstallShield?
  • WIX Installer: Prevent installation on Windows Server 2012 R2(关于如何调试条件)
  • Comment on the OR Installed construct

既然你想检测你的 Bundle 的状态,你应该看看 Burn Built-in VariablesWixBundleInstalled 会给你当前Bundle的安装状态。因此

WixBundleInstalled OR SoftwareAInstalled

如果当前捆绑包已经安装,或者如果您正在执行捆绑包的全新安装并且软件 A 已经存在,将允许安装程序继续。