我目前正在维护一个具有大量用户定义的注册表项的软件。我正在尝试制作一个 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> ...
请注意:两个值的密钥相同 当我尝试更改它时,这似乎仍然会吹走用户的价值。