2016-10-04 67 views
0

我們有兩種不同的產品不能同時安裝在同一臺計算機上,因此我們需要在Wix安裝程序中爲第一個一個叫A,它阻止它安裝在已安裝另一個的計算機上,比如B。如何防止在已安裝其他產品的情況下進行安裝,請使用Wix

我們已經爲A和B的定義不同UpgradeCodes,但我需要什麼添加到維克斯安裝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

也許我可以使用這種變化,我會發佈一個答案,如果我能解決它。 http://wixtoolset.org/documentation/manual/v3/howtos/files_and_registry/check_the_version_number.html – gakera

+0

這很可能有助於:https://blogs.technet.microsoft.com/alexshev/2008/02/10/from -msi到威克斯部分-3-發射條件和 - 應用搜索/ – gakera

回答

0

你應該能夠加入產品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> 

然後如果這臺機器上檢測到產品B,你可以使用一個啓動條件

<Condition Message="!(loc.CannotInstallWithProductBInstalled)">NOT PRODUCTBISINSTALLED OR Installed</Condition> 

所以,它會使用本地化文件中「CannotInstallWithProductBInstalled」字符串定義的錯誤消息停止安裝。

同樣的產品在產品B的檢測

2

您可以從其他已安裝的產品與財產申報包括componentsearch,喜歡這裏的例子有屬性ID和ComponentSearch搜索組件ID:

How to check for installed package in WiX 3.0?

然後在啓動條件中使用該屬性。

UpgradeCode檢測在大多數情況下工作,但不會工作在交叉上下文中。如果以前的產品是按每臺計算機(或每個用戶)安裝的,而您的產品則相反,則升級搜索不會檢測到該產品。假設所有的安裝都是相同的,並在InstallScope中指定,那麼UpgradeSearch就沒問題。

相關問題