卸载程序删除其他用户的 HKCU 密钥的合规方式

问题描述 投票:0回答:1

我知道一般答案是“不,你不需要”,例如卸载软件时如何删除 HKCU 注册表项?。该帖子建议,如果您足够绝望,可以使用 RegLoadKey 加载其他用户的配置单元。

然后如何循环加载所有用户的注册表配置单元声称加载用户配置单元不是线程安全的;如果您加载用户的配置单元,那么该用户将根本无法登录。此外,加载配置单元是一个全局操作,即使在调用

RegLoadKey
的进程终止后,它也会持续存在,因此您必须特别小心,确保在程序结束之前卸载配置单元。

现在,为什么不保留这些键不变呢?当然,对于只能由您的程序读取的密钥,您绝对可以不理会它们。即使某些与操作系统交互的键也可以毫无问题,例如

HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
中的那些键,即使启动时运行的路径不再存在,它也会默默地失败,因此用户不会注意到任何事情。编辑:从技术上讲,用户仍然会在他的任务管理器“启动”选项卡中看到剩余的条目

但是,某些键可能会产生挥之不去的副作用,例如:https://learn.microsoft.com/en-us/windows/win32/shell/integrate-cloud-storage,其中演示了注册

 CLSID
将“OneDrive”快捷方式添加到资源管理器的导航窗格。

现在假设我正在开发一个类似于 OneDrive 的程序,当它在用户 A 上运行时,它会在其导航窗格中注册一个

CLSID
作为快捷方式。现在管理员用户 B 运行卸载程序。根据这个“不要触摸其他注册表”准则,现在快捷方式应保留在用户 A 的导航窗格中,如果他想摆脱它,唯一的方法就是自己删除这些注册表项?

windows winapi windows-installer registry
1个回答
0
投票

如果您要写信给 HKCU,请考虑创建每用户安装包而不是每计算机安装包。这样就完全避免了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.