私は2つの要件を持つWIXインストーラーを書いています:
- アップグレードルールを実装します(
<MajorUpgrade>
または<Upgrade>
テーブルで正常に実行しました - 現在のバージョンと並行して古いバージョンを強制的にインストールする方法を維持します(したがって、アップグレードしないでください)。
問題は2番目の要件に起因します。アプリのすべてのバージョンに同じUpgradeCodeがある場合、システムは古いものを削除し(同じUpgradeCodeを使用)、新しいものをインストールします。
それで、古いバージョン(デフォルト)をアップグレードして、ユーザーに並列インストールを強制させることは可能ですか?私が持っている解決策の1つは、MSIをインストールするときにUpgradeCodeを変更することです。この場合、2つのバージョンは完全に独立しています。それが私が望んでいることです。
しかし、インストール段階で別のUpgradeCodeを指定する方法が見つかりませんでした。試しmsiexec /i app.msi UpgradeCode="{60C200E9-E317-4a67-9CC1-7BF156DEF4FD}"
ましたが、ログによると、UpgradeCodeプロパティは適切に取得されますが、MSIを構築するときにGUID指定を使用します。
MSIをインストールするときにUpgradeCodeを強制する方法はありますか?
参考までに、私のWixファイルは次のように構成されています。
<?define ProductUpgradeCode = "32318521-631C-4064-88C6-4A54FAA3B383"?>
[...]
<Product Name='App' Id='*' UpgradeCode='$(var.ProductUpgradeCode)'
Language='1033' Codepage='1252' Version='1.0.0' Manufacturer='App inc'>
[...]
<MajorUpgrade AllowDowngrades="yes" Schedule="afterInstallInitialize" />
編集-ソリューション、Ciprianの回答に基づく:
まず、ALLOWUPGRADE
デフォルト値を次のように設定してプロパティを定義しますYes
。
<Property Id="ALLOWUPGRADE" Value="Yes" />
次に、のアクションを条件付けして、次<InstallExecuteSequence>
の場合にのみ古いバージョンをアンインストールしますALLOWUPGRADE=Yes
。
<RemoveExistingProducts After="InstallFinalize">ALLOWUPGRADE="Yes"</RemoveExistingProducts>
さらに、アップグレードするか並列インストールするかをユーザーに尋ねるダイアログを追加することをお勧めします。ボタンParallelInstallBtn
を押すと、プロパティ値がに変更されNo
ます。このダイアログは、セクションFindRelatedProducts
によって古いバージョンが検出された後に呼び出されます。UpgradeVersion
<UI>
<Dialog Id="InstallDlg" Width="370" Height="270" Title="[ProductName] Setup" NoMinimize="yes">
[...]
<Control Id="ParallelInstallBtn" Type="PushButton" X="280" Y="243" Width="80" Height="17" Default="no" Text="&Parallel Install">
<Publish Property="ALLOWUPGRADE" Value="No">1</Publish>
<Publish Event="EndDialog" Value="Return">1</Publish>
</Control>
</Dialog>
<InstallUISequence>
<Show Dialog="InstallDlg" After="FindRelatedProducts">OLDERVERSIONBEINGUPGRADED</Show>
</InstallUISequence>
</UI>