如果已安装其他产品,如何使用Wix

时间:2016-10-04 11:14:40

标签: installation wix

我们有两种不同的产品不能同时安装在同一台机器上,因此我们需要在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或以某种方式进行搜索。

2 个答案:

答案 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检测