Installation 如何在Windows软件包之间创建依赖关系
我们正在使用WiX为我们的产品创建两个包。包A包括模块和其他组件,它们是包B的先决条件。我希望在安装包B时阻止卸载包A 你能推荐一些技巧吗 (我尝试使用UpgradeVersion/OnlyDetect和启动条件设置属性,但在卸载过程中跳过发现的FindRelatedProducts。)Installation 如何在Windows软件包之间创建依赖关系,installation,wix,Installation,Wix,我们正在使用WiX为我们的产品创建两个包。包A包括模块和其他组件,它们是包B的先决条件。我希望在安装包B时阻止卸载包A 你能推荐一些技巧吗 (我尝试使用UpgradeVersion/OnlyDetect和启动条件设置属性,但在卸载过程中跳过发现的FindRelatedProducts。) @Cosmin有一个很好的方法。我所做的是在包含包a的升级代码的包B中添加一个注册表值(认为这将允许在将来需要时打破依赖关系) 然后在卸载过程中,包A检查“依赖项”。 not REMOVE=“AL
@Cosmin有一个很好的方法。我所做的是在包含包a的升级代码的包B中添加一个注册表值(认为这将允许在将来需要时打破依赖关系)
然后在卸载过程中,包A检查“依赖项”。
not REMOVE=“ALL”或not PACKAGE_B_取决于=“$(var.packageupgradecode)”
解决方案是使用注册表项和搜索:
- 每个包在注册表中写入一些信息,例如安装路径和产品版本
- 每个软件包都使用一个用于检测其他安装程序的
- 您可以使用“搜索”属性来设置条件
此外,在安装过程中通常会跳过启动条件。这就是为什么错误自定义操作是一个好方法。什么会使启动条件被跳过?启动条件操作的默认条件。大多数安装程序编写工具将其设置为“未安装”,因此仅在安装期间评估启动条件。
<Component Id="RegistryInfo" Guid="*" Win64="$(var.Win64YesNo)">
<RegistryKey Id="CurrentVersion" Root="HKLM" Key="SOFTWARE\MYCO\PACKAGE_B\CurrentVersion" Action="create">
<RegistryValue Name="ProductVersion" Value="[ProductVersion]" Type="string" />
<RegistryValue Name="PackageAUpgradeCode" Value="$(var.PackageAUpgradeCode)" Type="string" />
</RegistryKey>
</Component>
<Property Id="PACKAGE_B_DEPENDS_ON">
<RegistrySearch Id="PackageAUpgradeCode" Root="HKLM" Key="SOFTWARE\MYCO\PACKAGE_B\CurrentVersion" Name="PackageAUpgradeCode" Type="raw" />
</Property>
<Condition Message='Package A is installed and requires this package.'>
not REMOVE = "ALL" or not PACKAGE_B_DEPENDS_ON = "$(var.PackageAUpgradeCode)"
</Condition>