删除 HKEY_CURRENT_USER 注册表项(卸载)
Posted
技术标签:
【中文标题】删除 HKEY_CURRENT_USER 注册表项(卸载)【英文标题】:Removing HKEY_CURRENT_USER Registry Entries (uninstall) 【发布时间】:2013-05-26 05:13:30 【问题描述】:有谁知道如何删除 Windows 7 上所有用户的 HKEY_CURRENT_USER 注册表项?我需要在卸载过程中删除我们产品的所有注册表项。可能有许多用户在使用该产品,每个用户在 HKEY_CURRENT_USER 下都有注册表项。我需要从卸载脚本 (InstallShield) 执行此操作,但如果我可以从 C++ 或 C# 执行此操作,我可能可以在卸载期间调用 dll 中的代码。
【问题讨论】:
只是对这个问题的评论:存在于用户配置文件和注册表的 HKCU 部分中的内容本质上是用户数据,您不应假设可以强制将其全部删除乙>。如果他们想稍后重新安装怎么办?如果那里有许可证密钥怎么办?还是人们想要保留的其他重要设置?不建议清理这些位置。相反,如果人们真的愿意,请在您的支持页面上提供有关如何手动清除它的指南。并考虑详细说明每个选项的真正用途。 【参考方案1】:基本上你需要枚举 HKEY_USERS 中的所有子键,寻找你想要删除的特定路径。
我不知道 Installscript 是否可以做到这一点,但我之前在 C++ 自定义操作 dll 中做过。看看this MSDN link,它描述了你通常如何做到这一点。您需要正确排序自定义操作,以使其拥有在每个人的 CU 配置单元中访问和删除所需的权限。
【讨论】:
枚举工作,但 RegDeleteKey 失败,错误代码为 5 (ERROR_ACCESS_DENIED)。我“以管理员身份”运行了测试应用程序。 您是否使用 KEY_ALL_ACCESS 调用了 RegOpenKeyEx? 是的,我用 KEY_ALL_ACCESS 打开了子密钥。我在具有管理员权限的用户下运行测试,并且正在“以管理员身份”运行测试。 哦,是的,我忘记了那部分;您需要递归删除 regkeys 如果有子键,RegDeleteKey 将失败。试试 RegDeleteTree (msdn.microsoft.com/en-us/library/aa379776%28VS.85%29.aspx) 请注意,这仅在用户当前登录时才有效。当他们注销时,他们的注册表配置单元会从 HKEY_USERS 中卸载。以上是关于删除 HKEY_CURRENT_USER 注册表项(卸载)的主要内容,如果未能解决你的问题,请参考以下文章
如何启用 ASP.NET 对注册表项 'HKEY_CURRENT_USER\Software\myAppKey\subdir' 的写访问?