開発者が変更をチェックインするたびにCIビルドシステムでMSIをビルドします。インストールされたMSIで自動受け入れテストを実行します。
基本的に、すべてのMSIは製品の完全なインストールであるため、それ自体にはバージョン管理(Windowsインストーラー)はありません。
各MSIには同じ製品GUIDとアップグレードGUID、および同じバージョン番号があります。ただし、パッケージは異なりますGUID(wixでは '*'を使用します)。
私が達成したいのは、インストーラーが実行されると、以前にインストールされたバージョンの製品を「アンインストール」し、新しいバージョンをインストールするということです。すべて単一のMSIから(私たちの制御の及ばない複雑なインストールプロセスがあります) .. citrixとsccmなので、簡単なインストールパスを提供します)
私が試してみました:
<Property Id='PREVIOUSVERSIONSINSTALLED' Secure='yes' />
<Upgrade Id='$UPGRADE_GUID'>
<UpgradeVersion Minimum='1.0.0.0'
Maximum='99.0.0.0'
Property='PREVIOUSVERSIONSINSTALLED'
IncludeMinimum='yes'
IncludeMaximum='no' />
</Upgrade>
そして持っている:
<InstallExecuteSequence>
<RemoveExistingProducts After='InstallFinalize' />
</InstallExecuteSequence>
そして試しました:
<InstallExecuteSequence>
<RemoveExistingProducts After='InstallInitialize' />
</InstallExecuteSequence>
しかし、後続のビルドからmsiをインストールしようとすると、次のようになります。
Another version of this product is already installed. Installation of this version cannot continue.
To configure or remove the existing version of this product, use Add/Remove Programs on the Control Panel.
それは私が本当に目指していたものではありません。
商品タグのバージョン属性のみを更新できることを理解していますが、管理が難しくなります。まず、MSIを生成するビルドパイプラインが多数あり、バージョン番号を適切に処理する方法がわからないため、1日あたり20以上のmsiビルドを生成できます。
たぶん、Windowsインストーラーは、このタイプの「常にインストールされたバージョンを上書きする」インストールを許可しませんか?
だから私はバージョン番号を変更せずにそれを行う方法を見つけました。
製品GUIDをビルドごとに変更しますが、アップグレードGUIDは同じにします。
また、RemoveExistingProductsをBefore = 'InstallInitialize'に変更する必要がありました。それ以外の場合は、インストールパスのビルド間の「デルタ」のみを残しました。
以下のWimで説明されているように、生成されたProduct GUIDを'*'
。
このコードを使用して、古いバージョンを削除し、新しいバージョンをインストールできます。
<Product Id="*"
UpgradeCode="87795f3dc95-81f5-473e-955e-2871a5bd66a5"
Name="AppName"
Language="1033"
Version="1.0.6"
Manufacturer="Manufacturer Name">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<MajorUpgrade Schedule="afterInstallInitialize"
DowngradeErrorMessage="A later version of [ProductName] is already installed"
AllowSameVersionUpgrades="yes" />
</Product>
試す
<InstallExecuteSequence>
<RemoveExistingProducts After='InstallFinalize' />
</InstallExecuteSequence>
これにより、インストールの完了後に既存の製品が削除されますが、実行する時点をカスタマイズすることもできます。
を参照してくださいhttp://mohundro.com/blog/2009/02/23/getting-started-with-wix-and-major-upgrades/
この質問 の受け入れられた回答も参照してください
製品コードとバージョンが同じでもパッケージコードが異なる場合は、常にWindowsインストーラのエラーメッセージが表示されます。
CIビルドにインストーラーのバージョン情報を含めることを強くお勧めします。各ビルドをインストールし、その後アップグレードする場合、バージョン管理は悪いことではありません。これをCIビルドに追加するのは比較的簡単なはずです。