2016-04-27 13 views
1

私は、WiX Toolset 3.10.2を使用して自分の製品のインストーラをビルドしています。複数のインストールを防止する

ソリューションに2つのWIXプロジェクトがあり、1つはコンパイルされたバイナリからMSIを構築し、もう1つはWixStandardBootstrapperApplicationを使用してMSIからsetup.exeをビルドします。

バージョンを増やしても正常に動作し、アップグレードを提案します。

同じインストーラを2回目に起動すると正常に動作し、「設定の変更」画面が表示されます。

問題は、バージョンを増やすことなくインストーラを再構築した後、以前のインストールを検出できず、うれしく2度目にインストールされるためです(「アンインストール」コントロールパネルには同じ項目が複数あります)。

これをやりなおす方法と、製品のインストール済みインスタンスを1つだけ許可する方法はありますか?

MSI:

<?include "..\Version.wxi"?> 

<Product Id="*" Name="xxx" Language="1033" Version="$(var.vvvVersion)" 
     Manufacturer="yyy" UpgradeCode="0d88cab0-d278-43bb-b891-607bc01c4dec" > 
    <MajorUpgrade DowngradeErrorMessage="A newer version of xxx is already installed." /> 

EXE:

<?include "..\Version.wxi"?> 

<Bundle Name="xxx" Manufacturer="yyy" Version="$(var.vvvVersion)" 
     UpgradeCode="eac46fb0-09d1-4c29-8fc1-984dddb35e50" 
     IconSourceFile="$(var.SolutionDir)applicationIcon.ico" > 

答えて

2

現在インストールバンドルのバージョンが<である場合に=の後ろに、以前のバンドルを残すために、バンドルのデフォルトの動作ですインストールされたバンドルのバージョン

これを回避する方法は2つあります。 1つは比較的実装が簡単で、もう1つはブートストラップアプリケーションのコードを編集する必要があります。

これを修正する最初の方法は、前述のとおり、バージョンの一部が常に増加するように、コードのビルド番号またはリビジョン番号に関連付けられたブートストラップのバージョンを使用することです。この方法では、ブートストラップは常に以前にインストールされたバンドルexeを削除することを知っています。注記すると、Bootstrapperアプリケーションでは4番目の数字を破棄するMSIとは異なり、バージョンの4つの部分すべてを考慮しています。これは、私がブートストラップアプリケーションで実装している解決策です。

この問題を解決するもう1つの方法は、OnPlanRelatedBundleのrequestedStateをオーバーライドすることです。 (参照用https://sourceforge.net/p/wix/bugs/3065/

+1

もし彼がそれを行っても(デフォルトでこれを有効にする議論がある)、MSIはバージョンをアップグレードすることなく同様の問題を呈します。私は実際にあなたのMSIがファイルバージョンとバンドルを拾い上げて製品バージョンを手に入れるためのサポートを追加しました: MSIのアップグレードテーブルを変更して、同じバージョンの後続ビルドの変更をテストするために必要な同じバージョンのアップグレードを許可することもできます。 – Heath

関連する問題