如何在卸载软件时删除HKCU注册表键?

8
当我的软件通过MSI安装时,它会在HKLM中创建一些注册表键。当人们使用软件时,他们的个人偏好设置将保存到HKCU中。卸载软件时,HKLM和HKCU注册表键将被删除,但我认为只有运行卸载的用户的HKCU键将被删除。如果是这样,那么如何确保其他在同一台机器上使用过我的软件的人的HKCU子键被删除?更新:在我的情况下保存的“个人偏好设置”实际上不是用户选择的设置,而是应用程序在运行期间为该用户存储的数据。因此,这不是用户希望保留的数据。如果重新安装应用程序,则它将没有任何用处,因此在卸载时删除它似乎是正确的。所以迄今为止最好的建议是Ed's: 不要使用注册表,尽管这并没有真正解决原来的问题。
3个回答

3
简短的回答是不需要这样做。安装程序应该只删除它创建的条目,而不删除其他内容。如果您的应用程序在运行时创建了每个用户的设置,则这些设置不受安装程序的所有权。
如果您真的真的想要这样做,可以创建一个自定义操作并强制卸载作为管理员运行,以便访问所有用户注册表。请注意 - 这是完全非标准行为,可能需要大量时间和系统资源来挂载和卸载所有用户注册表。如果您的卸载程序不小心,可能会损坏系统级别的注册表,并使系统无法启动。
正如我在对sascha回复的评论中提到的,Windows Installer最佳实践建议(说?)在卸载时保留自定义用户设置。这样,如果用户重新安装您的软件,他们的设置将可用。

我不能只循环遍历HKEY_USERS的每个子树并删除我的数据吗?或者你是在说这样做会很慢? - Rory
在具有漫游配置文件的情况下,使用这种方式删除数据是危险的。我对细节有点模糊,但我认为它会破坏时间戳比较,并且如果选择了不正确的配置文件作为"合并"的获胜者,可能会导致配置文件数据丢失。 - Michael Urman
1
好的,要认识到这不是“你的数据”。一旦它在用户注册表中,它就是用户的数据。而且,加载和卸载单独的用户注册表是相当慢的。你需要非常小心地不要对系统帐户配置文件做任何事情,所以你首先需要识别常规用户配置文件。正如MichaelU所提到的,如果正在使用漫游配置文件,你可能会导致一些不属于你的应用程序的东西被损坏(你真的想让客户IT组给你打电话,要求你为重建他们所有的用户配置文件付账吗?)。这是一个坏主意。 - DaveE
请参考上面Ed的回复,以获得更好的计划。 - DaveE

3
如果您真的想要能够清除用户数据,请将用户数据存储在文件系统中。比如 "Documents and Settings\username\Application Data\Your Organization\Your Application" 这样的地方。这些数据很容易在卸载时使用 RemoveFile 表中的条目进行删除。
Windows Installer 开发团队在他们的博客上专门讨论了这个问题。请参见“规则26”。 http://blogs.msdn.com/windows_installer_team/archive/2006/05/12/595950.aspx 更新:
很多年前,我写了一段代码,实现了你所描述的注册表操作,但很快就后悔了。不仅很麻烦,而且还有一个与权限相关的问题。简而言之,安装程序服务没有管理员拥有的所有特权。它们不仅被禁用,而且从进程的安全标记中也消失了。特别是,这包括加载和卸载注册表 hive 所需的特权(据我所知,是 se_restore_privilege)。即使调用用户是管理员,这也会导致静默安装和卸载失败,而我不能只禁止静默安装和卸载。
另一个尚未出现的问题是 Active Directory。我不确定,但我认为在 AD 环境中,你所描述的操作将需要跨越严格的附加步骤。
总的来说,我尽量避免安装或卸载操作涉及到 HKCU hive。我发现这样做只会带来很少的好处,但是会引起很大的痛苦。

2

这无法做到,只能删除当前用户的条目。

您可以使用ActiveSetup来解决这个问题,不过除了那个链接之外,它几乎没有记录,也不受微软支持。所以如果您使用它,请不要依赖它;)

卸载时不删除用户数据的背后理念是一个颇有争议的话题,其中有一些非常有趣的历史...我记得旧版的 Office 保存文档在安装目录下,当用户升级后删除旧的办公文件夹且遗失文档后我们接到的抱怨数量是巨大的。最近更多的投诉是人们丢失自定义 Normal.dot 模板。

作为业务软件相关人士,我的观点是:如果人们依赖你的软件作为他们的办公流程的一部分,并花时间定制设置,请勿在卸载期间删除这些设置。

从另一个角度来看,如果您卸载了一个您已经花费数小时/数天/数周玩耍的游戏-您是否希望您的存档被删除呢?您的自定义配置文件呢?家庭共用电脑上的游戏呢?某个人卸载了一个游戏来释放磁盘空间,却不知道另一个家庭成员经常玩这个游戏。您想要处理来自客户的这些投诉吗?


如果人们将您的软件作为办公工作流程的一部分并花时间自定义设置,请在卸载过程中不要删除设置。据我所知,这也是 Windows Installer 最佳实践的一部分。(IIRC) - DaveE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接