在安装时删除的注册表项在卸载时不会被替换

时间:2019-07-29 11:38:21

标签: windows wix

我有一个带有RemoveRegistryValue元素的Wix脚本。安装产品时,它会正确删除注册表值(前提是我现在具有提升的特权运行)。但是,当我卸载产品时,注册表值不会被替换。 如果我希望删除该值并且再也看不到它,那我可以进入regedit并将其删除。将删除内容放入Windows Installer软件包的整个想法是,我可以卸载该软件包并将所有内容放回原处。但是,这没有发生。

<RemoveRegistryValue Id='ShowLnk' Root ='HKLM' 
       Key='SOFTWARE\Classes\Lnkfile' Name ='NeverShowExt' /> 

在安装时,该值将被删除(如果必须知道它的作用,则会导致快捷方式显示其.lnk扩展名)。卸载后,注册表值不会被替换(导致快捷方式永久显示其.lnk扩展名,这可能是件好事,但与本讨论无关)。

如何在卸载产品时将注册表值重新带回注册表中?

我现在在这里提出了另一个问题... Getting a custom action to run on install and uninstall

1 个答案:

答案 0 :(得分:1)

在卸载时,Windows Installer仅“撤消”它在安装过程中在本地计算机上实际创建的操作。

在卸载过程中,诸如删除注册表项/值和文件之类的“副作用”将不会撤消(尽管发生回滚时,它们也会按预期撤消)。

要支持您的方案,您必须自己备份和还原注册表值:

安装时:

  • 使用RegistrySearch获取'NeverShowExt'的现有值。您可能需要设置Win64="yes",对此我不确定。

  • 将值的备份存储在应用程序注册表项(HKLM\Software\[Manufacturer]\YourProductKey)中。

在卸载时:

  • 使用RegistrySearch从您的应用程序注册表项中获取备份值。
  • 创建一个延迟的自定义操作,该操作将注册表值写回到其原始位置。卸载时没有声明性的“ WiX方式”将某些内容写入注册表。
相关问题