我们有两种不同的产品不能同时安装在同一台机器上,因此我们需要在Wix安装程序中添加第一个检查,调用A,以防止它被安装在安装了另一台B机器的机器。
我们已经为A和B定义了不同的UpgradeCodes,但是我需要将哪些内容添加到Wix安装XML中来说明"if you find anything with UpgradeCode A, don't install this, since this has UpgradeCode B".
我在这里看到过类似的问题 但是 答案通常不会提供清晰的xml,而且只是部分相似,例如检查x86与同一产品的64或仅阻止安装我们已经做过的同一产品的旧版本。几乎所有的Wix答案都不包含xml,我觉得这很奇怪,因为这是我知道如何定义这些东西的唯一方法。
关于这个的Wix文档也非常稀疏,我发现了一些关于AppSearch(http://wixtoolset.org/documentation/manual/v3/xsd/wix/appsearch.html)的内容,但是这并没有帮助我弄清楚如何在xml中使用它来阻止安装,如果应用程序是发现,或者如何通过UpgradeCode或以某种方式进行搜索。
答案 0 :(得分:2)
您可以使用包含componentsearch的Property声明从其他已安装产品中搜索组件ID,例如此处带有Property id和ComponentSearch的示例:
How to check for installed package in WiX 3.0?
然后在启动条件下使用该属性。
UpgradeCode检测大部分时间都可以工作,但不会在跨上下文中工作。如果每台计算机(或每个用户)安装了以前的产品,而您的产品则相反,那么升级搜索就无法检测到它。假设所有安装都是相同的并在InstallScope中指定,那么UpgradeSearch就可以了。
答案 1 :(得分:0)
您应该可以在产品A中添加一些升级检测:
misc_charges_array = MiscCharge.select(:id, :code, :desc).map {|e| e.attributes.values}
然后你可以使用启动条件
<Upgrade Id="$(var.ProductBInstallerUpgradeGUID)" >
<UpgradeVersion
IncludeMaximum ="yes"
IncludeMinimum="yes"
Maximum="255.255.65535.65535"
Minimum="1.0.0.0"
MigrateFeatures="no"
Property="PRODUCTBISINSTALLED"
OnlyDetect="yes" />
</Upgrade>
因此,如果在此计算机上检测到产品b,它将使用本地化文件中“CannotInstallWithProductBInstalled”字符串定义的错误消息停止安装。
类似于产品B中的产品A检测