wix - 如何防止注册表删除作为已安装的 MSI 卸载的一部分?

标签 wix upgrade windows-installer major-upgrade

我们目前正在生产一个 MSI(例如 Broker.msi)。作为安装的一部分,MSI(在 Wix 中定义)创建一个新的注册表项(Broker)并在其下添加 2 个子项。安装后,当用户注册我们的产品时,“Broker”下会添加 1 个名为“Key3”的注册表项 节点。请注意,“Key3”包含注册 key ,该 key 非常重要并且可以被产品的其他层访问。

[安装和注册后的注册表结构]

HKLM\Software\Microsoft\Broker

  • Key1(由安装程序添加)

  • Key2(由安装程序添加)

  • Key3(用户注册产品时添加)

[Wix 代码片段]

  <Component Id="RegistryEntries" Guid="*" Win64="$(var.WIN64_COMPONENT)">
          <RegistryKey Root="HKLM" Key="Software\Microsoft\Broker"  Action="createAndRemoveOnUninstall">
            <RegistryValue Type="string" Name="Key1" Value="1rp1users" KeyPath="yes"/>
            <RegistryValue Type="string" Name="Key2" Value="http://windowsbackup/m1" />
          </RegistryKey>
    </Component>
....
 <ComponentRef Id="RegistryEntries" />

问题: 到目前为止,自从我们使用补丁以来,我们没有遇到任何升级问题。从下一个版本开始,我们希望进行重大升级,但最大的挑战是:在重大升级期间,旧产品将被卸载。根据 wix 片段,“Broker”注册表元素的操作元素是 “CreateAndRemoveOnUninstall”,因此整个“Broker”节点以及“Key3”子项都会被删除。

如果我将操作更新为“创建”,问题将通过新安装得到解决,但由于 msi 已经投入生产,如何防止它在现有产品主要升级过程中删除注册表?

最佳答案

您需要实现 Remember Property图案。这将导致新的 MSI 在主要升级删除旧版本之前检索数据,然后在最后重新应用它。

关于wix - 如何防止注册表删除作为已安装的 MSI 卸载的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29744315/

相关文章:

upgrade - 将 odoo 8 升级到 odoo 9 时遇到问题

service - 防止服务在 WiX 重大升级时丢失设置

WiX 与 Windows Installer 版本(架构)的兼容性

wix - 如何使用 WiX 将 CustomActionData 传递给 CustomAction?

c# - CustomAction 被调用两次

wix - 从32位WIX安装程序检测64位系统

c++ - 如何在 Wix 中将 $(var.Platform) 从 x86 更改为 Win32

c# - 如何使用 wix 安装程序在自定义文件夹中安装应用程序,而不是 Program Files 文件夹

node.js - 如何在Windows上从v0.12.2升级nodejs?

c++ - 卸载程序不会删除复制的库到 VS2010 安装程序项目中的系统文件夹。