私は現在、ユーザー定義のレジストリ キーを大量に持つソフトウェアを保守しています。私は、最小限の保守性でこれらのレジストリ キーを保持する WIX インストーラを作成しようとしています。WIX の NeverOverwrite='yes' 機能を使用できるように、レジストリ キー内の各値を独自のコンポーネントにすることにしました。これが存在すると、マイナー アップグレード (例: REINSTALL=ALL REINSTALLMODE=vomus) で値が作成され、存在しない場合はそのままにしておくことができると想定しました。ただし、これは私の実際の例では発生していないようです (機能に条件はありません)。ドキュメントは、私が良いはずだと言っています。以下にいくつかのサンプルを示します。
<Product Id="UNIQUE_KEY" Name="Spotbox Manager" Language="1033" Version="1.0.1.0" Manufacturer="Company" UpgradeCode="MY_UPGRADE_KEY">
<Package Platform="x64" Id="*" InstallerVersion="200" Compressed="yes" InstallScope="perMachine" InstallPrivileges="elevated" />
<Upgrade Id="MY_UPGRADE_KEY">
<UpgradeVersion OnlyDetect='yes' Property='SELFFOUND'
Minimum='1.0.1' IncludeMinimum='yes'
Maximum='1.0.1' IncludeMaximum='yes' />
<UpgradeVersion OnlyDetect='yes' Property='NEWERFOUND'
Minimum='1.0.1' IncludeMinimum='no' />
</Upgrade>
これは、レジストリ キーの実際のフラグメントです。
<Component Id="cmp171812fcc51a4b91ad386fa8c27c9b89" Directory="TARGETDIR" Guid="COMPONENT_GUID" Win64='yes' NeverOverwrite='yes'>
<RegistryKey Key="SOFTWARE\Company" Root="HKLM">
<RegistryValue Name="Value" Value="1100797834" Type="integer" KeyPath='yes'/>
</RegistryKey>
</Component>
<Component Id="cmp211639bff9694f029028a22cb0bb9687" Directory="TARGETDIR" Guid="NEW COMPONENT GUID" Win64='yes' NeverOverwrite='yes'>
<RegistryKey Key="SOFTWARE\Company" Root="HKLM">
<RegistryValue Name="Country Code" Value="1" Type="integer" KeyPath='yes' />
</RegistryKey>
</Component> ...
注: キーは両方の値で同じです。これを変更しようとすると、ユーザーの値が吹き飛ばされるようです。