2016-10-04 14 views
0

同じマシンに2つの異なる製品をインストールすることはできませんので、最初にWixインストーラでチェックを追加する必要があります1つは、既に他のもの、例えばBがインストールされているマシンにインストールされないように、Aを呼び出します。Wixを使用して他の製品が既にインストールされている場合のインストールを防止する方法

我々はすでにAとBのために定義された異なるUpgradeCodesを持っていますが、私はウィックスに追加する必要がないこと"if you find anything with UpgradeCode A, don't install this, since this has UpgradeCode B".

ような何かを言うためにXMLをインストールし、私はここに同様の質問が、を見てきました答えは通常、明確なxmlを提供するものではなく、同じ製品のx86 vs 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-to-wix-part-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"文字列で定義されているエラーメッセージでインストールを停止します。製品のための同様

、プロパティIDとComponentSearchとここでの例のように、componentsearchを含むプロパティ宣言と他のインストールされた製品から部品IDを検索することができ、製品B

2

で検出:

How to check for installed package in WiX 3.0?

次に、起動条件でプロパティを使用します。

UpgradeCode検出はほとんどの場合動作しますが、クロスコンテキストは動作しません。以前の製品がマシン(またはユーザー)ごとにインストールされていて、その逆の場合、アップグレード検索では検出されません。すべてのインストールが同じでInstallScopeで指定されていると仮定すると、UpgradeSearchは問題ありません。

関連する問題