安装时删除的注册表项不会在卸载时被替换
Registry entry that was removed on install not being replaced on uninstall
我有一个带有 RemoveRegistryValue 元素的 Wix 脚本。它在我安装产品时正确地删除了注册表值(假设我 运行 具有提升的权限,我现在就是)。但是,当我卸载产品时,注册表值没有被替换。
如果我想删除该值并且再也看不到我可以直接进入 regedit 并将其删除。将删除放在 Windows 安装程序包中的整个想法是,我可以卸载该包并将所有内容放回我需要的位置。然而这并没有发生。
<RemoveRegistryValue Id='ShowLnk' Root ='HKLM'
Key='SOFTWARE\Classes\Lnkfile' Name ='NeverShowExt' />
安装时该值被删除(如果您必须知道它的作用,快捷方式会显示其 .lnk 扩展名)。卸载时注册表值不会被替换(导致快捷方式永远显示其 .lnk 扩展名,这可能是件好事,但与本次讨论无关)。
如何在卸载我的产品时将注册表值取回注册表?
我现在在这里提出另一个问题...Getting a custom action to run on install and uninstall
卸载时,Windows 安装程序仅 "undoes" 安装期间在本地计算机上实际 创建 的内容。
"Side effects" 就像删除注册表 keys/values 和文件在卸载期间不会被撤销(尽管当回滚发生时,这些将按预期被撤销)。
要支持您的方案,您必须自己备份和恢复注册表值:
安装时:
使用RegistrySearch
得到'NeverShowExt'的现有值。您可能需要设置 Win64="yes"
,我不确定。
在您的应用程序注册表项 (HKLM\Software\[Manufacturer]\YourProductKey
) 中存储该值的备份。
卸载时:
- 使用
RegistrySearch
从您的应用程序注册表项中获取备份值。
- 创建将注册表值写回其原始位置的延迟自定义操作。卸载时没有向注册表写入内容的声明 "WiX way"。
我有一个带有 RemoveRegistryValue 元素的 Wix 脚本。它在我安装产品时正确地删除了注册表值(假设我 运行 具有提升的权限,我现在就是)。但是,当我卸载产品时,注册表值没有被替换。 如果我想删除该值并且再也看不到我可以直接进入 regedit 并将其删除。将删除放在 Windows 安装程序包中的整个想法是,我可以卸载该包并将所有内容放回我需要的位置。然而这并没有发生。
<RemoveRegistryValue Id='ShowLnk' Root ='HKLM'
Key='SOFTWARE\Classes\Lnkfile' Name ='NeverShowExt' />
安装时该值被删除(如果您必须知道它的作用,快捷方式会显示其 .lnk 扩展名)。卸载时注册表值不会被替换(导致快捷方式永远显示其 .lnk 扩展名,这可能是件好事,但与本次讨论无关)。
如何在卸载我的产品时将注册表值取回注册表?
我现在在这里提出另一个问题...Getting a custom action to run on install and uninstall
卸载时,Windows 安装程序仅 "undoes" 安装期间在本地计算机上实际 创建 的内容。
"Side effects" 就像删除注册表 keys/values 和文件在卸载期间不会被撤销(尽管当回滚发生时,这些将按预期被撤销)。
要支持您的方案,您必须自己备份和恢复注册表值:
安装时:
使用
RegistrySearch
得到'NeverShowExt'的现有值。您可能需要设置Win64="yes"
,我不确定。在您的应用程序注册表项 (
HKLM\Software\[Manufacturer]\YourProductKey
) 中存储该值的备份。
卸载时:
- 使用
RegistrySearch
从您的应用程序注册表项中获取备份值。 - 创建将注册表值写回其原始位置的延迟自定义操作。卸载时没有向注册表写入内容的声明 "WiX way"。