【发布时间】:2013-03-12 19:31:51
【问题描述】:
我目前正在维护一个包含大量用户定义注册表项的软件。 我正在尝试制作一个 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> ...
请注意:两个值的密钥相同 当我尝试更改它时,这似乎仍然会吹走用户的值。
【问题讨论】:
-
您究竟是如何设置 GUID 的?并且,尝试在 NeverOverwrite 旁边启用永久。
-
我正在接收来自 Resharpers nguid sn-p 命令的 guid。我看不出永久人会有什么影响。我是用 NeverOverwrite 还是代替它?
-
与。如果我知道原因(在你的情况下),那将是一个答案,而不是评论。
-
似乎对它没有任何影响。我想知道是否有任何设置。如果它不适用于特定的拱门或类似的东西。
-
我想我成功了。是的,Permanent 应该这样做,但也需要在 old MSI 上进行设置。原因是该组件通过旧的 MSI 进行卸载。这导致 KeyPath 消失。这会触发新 MSI 的安装。
标签: c# installation wix