WiX - 在主要升级时保留注册表设置

问题描述:

我们使用WiX 3.5为我们的产品之一构建安装程序。为简单起见,我们通过一次重大升级处理版本升级的,就像这样:WiX - 在主要升级时保留注册表设置

<MajorUpgrade AllowSameVersionUpgrades="yes" DowngradeErrorMessage="Laterversionfound" /> 

我们没有指定的时间表属性,这意味着RemoveExistingProducts操作应“InstallValidate”后运行 - 这意味着旧版本完全卸载将在安装新版本之前进行。

我们安装了一些HKLM注册表设置,用户在安装后必须配置这些设置。由于主要升级会执行完全卸载,然后重新安装,因此我们正在丢失注册表中的用户定义设置。理想情况下,我们需要能够在升级过程中保持这些。

我的注册表关键部件是这样的:

<Component Id="regserver" Guid="[guid]"> 
    <RegistryValue Root="HKLM" Key="Software\Our Company\Our Product" Name="Server" Value="" Type="string" KeyPath="yes" /> 
</Component> 

我试过设置的组件为“yes”的NeverOverwrite属性但这未能重现键的不幸影响 - 大概是因为它检查密钥是否存在之前卸载发生(显然他们这样做),然后他们被删除与卸载,但不会再次重新创建。

我也尝试设置MajorUpgrade元素上的“RemoveFeatures”属性来删除除reg键以外的所有内容。尽管安装了两个版本的产品,但包含注册表项的功能属于旧版本。

我的下一步是尝试在不同的时间点调度RemoveExistingProducts选项,尽管我期望对我们的一些自定义操作有一定的痛苦。

所以我的问题是,有没有什么办法来实现我们需要的,而不会改变RemoveExistingProducts的计划?

+0

您能更改原始安装程序吗?如果是这样,您可以使注册表组件永久,这意味着它不会被卸载。 – 2011-12-20 16:53:40

+0

我是否认为即使产品被卸载,这也会使设置保持不变?理想情况下,我宁愿为我们的客户完全清洁卸载 – 2011-12-20 17:48:09

使用RegistrySearch将当前值加载到属性中,然后使用RegistryValue中的[PROPERTY]来写入这些值。如果没有安装旧产品,则属性将保持其默认值。

+0

完美 - 感谢鲍勃 – 2011-12-21 15:56:31