我目前正在维护一个具有用户定义的注册表项加载的软件。 我试图做一个WIX安装程序,保持这些注册表键与至少 数量的可维护性。我决定让每个值都在一个注册表键中,它是自己的组件,允许我使用WIX的NeverOverwrite ='yes'功能。我认为这样做会允许次要升级(例如REINSTALL = ALL REINSTALLMODE = vomus),如果它存在,则创建该值,否则将其保留。但是,这似乎并没有发生在我的真实世界的例子(功能没有条件)。文件告诉我我应该很好。下面是几样:注册表值在执行Wix次要升级后消除
<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> ...
请注意:关键是这两个值这似乎仍然吹走用户的价值时相同我尝试改变它。
您究竟如何设置GUID?并且,尝试在NeverOverwrite旁边启用永久。 – 2013-03-22 20:47:06
我收到来自Resharpers nguid snippet命令的guid。我不明白Permanant会如何处理。我是否将它与NeverOverwrite一起使用或者替代? – 2013-03-22 21:32:15
有。如果我知道为什么(在你的情况下),这将是一个答案,而不是一个评论。 – 2013-03-22 21:34:12