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



我们正在使用WiX 3.5为我们的一个产品构建安装程序。为简单起见,我们通过主要升级来处理版本升级,如下所示:

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

我们没有指定Schedule属性,这意味着RemoveExistingProducts操作应该在"InstallValidate"之后运行——这意味着在安装新版本之前,将完全卸载旧版本。

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

我的注册表键组件是这样的:

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

我尝试将组件的NeverOverwrite属性设置为"yes",但这有无法重新创建密钥的不幸影响-大概是因为它检查在卸载发生之前是否存在密钥(显然它们会这样做),然后它们随着卸载被删除,但不会再次重新创建。

我还尝试在MajorUpgrade元素上设置"RemoveFeatures"属性,以删除除reg键外的所有内容。由于包含reg键的特性属于旧版本,因此将会安装两个版本的产品。

我的下一步是尝试在不同的点调度RemoveExistingProducts选项,尽管我预计一些自定义操作会带来一定程度的痛苦。

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

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

最新更新