現在、MSI が運用されています (Broker.msi など)。インストールの一部として、MSI (Wix で定義) は新しいレジストリ キー (Broker) を作成し、その下に 2 つのサブキーを追加します。インストール後、ユーザーが製品を登録すると、「Broker」ノードの下に「Key3」というレジストリ キーが 1 つ追加されます。「Key3」には、製品の他のレイヤーからアクセスされる非常に重要な登録キーが含まれていることに注意してください。
[インストール & 登録後のレジストリ構造]
HKLM\ソフトウェア\マイクロソフト\ブローカー
Key1 (インストーラーによって追加)
Key2 (インストーラーによって追加)
Key3 (ユーザーが製品を登録するときに追加)
[Wix コード スニペット]
<Component Id="RegistryEntries" Guid="*" Win64="$(var.WIN64_COMPONENT)">
<RegistryKey Root="HKLM" Key="Software\Microsoft\Broker" Action="createAndRemoveOnUninstall">
<RegistryValue Type="string" Name="Key1" Value="1rp1users" KeyPath="yes"/>
<RegistryValue Type="string" Name="Key2" Value="http://windowsbackup/m1" />
</RegistryKey>
</Component>
....
<ComponentRef Id="RegistryEntries" />
問題: これまでパッチ適用を使用していたため、アップグレードで問題が発生することはありませんでした。次のリリースからメジャー アップグレードに移行したいのですが、最大の課題は、メジャー アップグレード中に古い製品がアンインストールされることです。Wix スニペットによると、「Broker」レジストリ要素のアクション要素は「CreateAndRemoveOnUninstall」であるため、「Broker」ノード全体が「Key3」サブキーとともに削除されます。
アクションを「作成」に更新すると、問題は新規インストールで修正されますが、msi は既に運用されているため、既存の製品のメジャー アップグレードの一部としてレジストリが削除されないようにするにはどうすればよいですか?