Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Installation 如果已经安装了其他产品,如何使用Wix防止安装_Installation_Wix - Fatal编程技术网

Installation 如果已经安装了其他产品,如何使用Wix防止安装

Installation 如果已经安装了其他产品,如何使用Wix防止安装,installation,wix,Installation,Wix,我们有两种不同的产品,它们不可能同时安装在同一台机器上而不损坏,因此我们需要在Wix安装程序中为第一个产品添加一个检查,称为a,以防止它安装在已经安装了另一个(例如B)的机器上 我们已经为A和B定义了不同的升级代码,但是我需要向Wix安装XML中添加什么,比如说“如果您发现有升级代码A,请不要安装它,因为它有升级代码B”。 我在这里看到了类似的问题但是答案通常不提供清晰的xml,而且只是部分相似,例如检查同一产品的x86与64,或者只是阻止安装同一产品的旧版本,我们已经这样做了。这里几乎所有的W

我们有两种不同的产品,它们不可能同时安装在同一台机器上而不损坏,因此我们需要在Wix安装程序中为第一个产品添加一个检查,称为a,以防止它安装在已经安装了另一个(例如B)的机器上

我们已经为A和B定义了不同的升级代码,但是我需要向Wix安装XML中添加什么,比如说
“如果您发现有升级代码A,请不要安装它,因为它有升级代码B”。

我在这里看到了类似的问题但是答案通常不提供清晰的xml,而且只是部分相似,例如检查同一产品的x86与64,或者只是阻止安装同一产品的旧版本,我们已经这样做了。这里几乎所有的Wix答案实际上都不包含xml,我觉得这很奇怪,因为这是我知道如何定义这些东西的唯一方法


关于这个的Wix文档也非常稀少,我找到了一些关于AppSearch()的东西,但这并不能帮助我弄清楚如何在xml中使用它来防止安装,如果找到了应用,或者如何通过升级代码或其他方式进行搜索。

您应该能够在产品A中添加一些升级检测:

<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>

然后您可以使用启动条件

<Condition Message="!(loc.CannotInstallWithProductBInstalled)">NOT PRODUCTBISINSTALLED OR Installed</Condition>
未安装或未安装
因此,如果在此计算机上检测到产品b,它将停止安装,并显示由本地化文件中的“CannotInstallWithProductBinInstalled”字符串定义的错误消息


类似地,对于产品B中的产品A检测,您应该能够在产品A中添加一些升级检测:

<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>

然后您可以使用启动条件

<Condition Message="!(loc.CannotInstallWithProductBInstalled)">NOT PRODUCTBISINSTALLED OR Installed</Condition>
未安装或未安装
因此,如果在此计算机上检测到产品b,它将停止安装,并显示由本地化文件中的“CannotInstallWithProductBinInstalled”字符串定义的错误消息


类似地,对于产品B中的产品A检测,您可以使用包含componentsearch的属性声明从其他已安装产品中搜索组件id,如下面使用属性id和componentsearch的示例:

然后在启动条件下使用该属性


升级代码检测在大多数情况下有效,但不会跨上下文工作。如果以前的产品是每台机器(或每用户)安装的,而您的产品正好相反,则升级搜索不会检测到它。假设所有安装都相同并在InstallScope中指定,则可以进行升级搜索

您可以使用包含componentsearch的属性声明从其他已安装产品中搜索组件id,如下面使用Property id和componentsearch的示例:

然后在启动条件下使用该属性


升级代码检测在大多数情况下有效,但不会跨上下文工作。如果以前的产品是每台机器(或每用户)安装的,而您的产品正好相反,则升级搜索不会检测到它。假设所有安装都相同并在InstallScope中指定,则可以进行升级搜索

也许我可以使用这个的一个变体,如果我能解决它,我会发布一个答案。这很可能也会有帮助:也许我可以使用它的一个变体,如果我能解决它,我会发布一个答案。这很可能也有助于: