我有一个带有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
答案 0 :(得分:1)
在卸载时,Windows Installer仅“撤消”它在安装过程中在本地计算机上实际创建的操作。
在卸载过程中,诸如删除注册表项/值和文件之类的“副作用”将不会撤消(尽管发生回滚时,它们也会按预期撤消)。
要支持您的方案,您必须自己备份和还原注册表值:
安装时:
使用RegistrySearch
获取'NeverShowExt'的现有值。您可能需要设置Win64="yes"
,对此我不确定。
将值的备份存储在应用程序注册表项(HKLM\Software\[Manufacturer]\YourProductKey
)中。
在卸载时:
RegistrySearch
从您的应用程序注册表项中获取备份值。