WiX在主要升级期间保留注册表,但在卸载时删除

WiX在主要升级期间保留注册表,但在卸载时删除,wix,windows-installer,Wix,Windows Installer,我希望在MSI主要升级期间保留所有注册表值(全部包含在单个注册表项中),但我希望在卸载应用程序时删除这些值(与往常一样) 我相信我需要使用来实现这一点,将值单独读取到属性 我理解这可以通过使用以下标记来实现: <Property Id="EXISTINGAPIKEY"> <RegistrySearch Id="name_of_dword" Root="HKLM" Key="Software\SomeCompany\SomeApp" Name="api

我希望在MSI主要升级期间保留所有注册表值(全部包含在单个注册表项中),但我希望在卸载应用程序时删除这些值(与往常一样)

我相信我需要使用来实现这一点,将值单独读取到属性

我理解这可以通过使用以下标记来实现:

<Property Id="EXISTINGAPIKEY">
  <RegistrySearch Id="name_of_dword"
    Root="HKLM"
    Key="Software\SomeCompany\SomeApp"
    Name="api_key"
    Type="raw" />
</Property>

我现在已将
HKLM:\Software\SomeCompany\SomeApp\api\u key
的值保存到名为
EXISTINGAPIKEY
的属性中

下一步是在升级完成后,但在服务(由软件包安装/更新)启动之前,将此值写回注册表

因此,问题是:

  • 如何在更新之后但在服务启动之前将此属性写回注册表
  • 如何确保这只在升级期间发生,并且在卸载期间清理注册表
    很有可能是我想得太多了

    实际上,您可以创建一个自定义操作,该操作将仅在卸载时删除带有值的注册表项,而在主要升级期间不执行任何操作。另一个选项是为带有注册表项和值的注册表项和值设置
    neverwrite
    (如果您在安装程序中进行了管理),谢谢@PavelAnikhouski,我甚至不知道从哪里开始自定义操作(我只是一个PowerShell家伙)。我将尝试在包含注册表项的组件上使用
    neverwrite
    ,然后还原@PavelAnikhouski这不是我想要的,我会在有机会的时候更新这个问题(再次感谢!)事实上,你可以创建一个自定义操作,只在卸载时删除带有值的注册表项,而在主要升级期间不做任何事。另一个选项是使用注册表项和值为设置
    neverwrite
    (如果您在安装程序中管理它)谢谢@PavelAnikhouski,我甚至不知道从哪里开始自定义操作(我只是一个PowerShell家伙)。我将尝试在包含注册表项的组件上使用
    NeverOverwrite
    ,然后还原!@PavelAnikhouski这不是我想要的,我会在有机会时更新问题(再次感谢!)