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

时间:2010-03-02 18:04:32

标签: windows-installer registry

通过MSI安装我的软件后,它会在HKLM中创建一些注册表项。当人们使用该软件时,他们的个人偏好被保存到HKCU。卸载软件时,HKLM和HKCU注册表项被删除,但我认为只有正在运行卸载的用户的HKCU密钥才会被删除。它是否正确?如果是这样,我如何确保删除在同一台机器上使用我的软件的其他人的HKCU子键?

更新:在我的案例中保存的“个人偏好”不是用户选择的真实设置,而是应用程序在为该用户运行时存储的数据。所以这并不是用户想要保留的真实数据。在卸载时删除它似乎是正确的,因为如果重新安装应用程序它将没有任何用处。所以我想到目前为止最好的建议是Ed's: don't use the registry,虽然这并不能真正解决原来的问题。

3 个答案:

答案 0 :(得分:3)

简短的回答是你没有。安装程序用于删除创建的条目,而不删除任何其他条目。如果您的应用程序在运行时创建了每个用户的设置,则这些设置不属于安装例程。

如果您确实真的想要这样做,可以创建自定义操作并强制卸载以管理员身份运行,以便您可以访问所有用户配置单元。请注意 - 这是完全不标准的行为,可能需要花费大量时间和时间。系统资源安装&卸载所有用户配置单元。如果您的卸载程序不小心,则可能会损坏系统级配置单元中的内容并使您的系统无法启动。

正如我在对sascha的回复的评论中提到的,Windows Installer最佳实践说(说?)在卸载时保留自定义用户设置。这样,如果用户重新安装软件,则可以使用其设置。

答案 1 :(得分: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

更新

很多年前,我编写的代码可以完成你用注册表所描述的内容,很快就后悔了。这是一种痛苦,但更重要的是,它有一个与特权相关的问题。简短版本是安装程序服务不以Admin具有的所有权限运行。他们不仅仅是残疾人,他们也没有参加这个过程的安全令牌。值得注意的是,这包括加载和卸载注册表配置单元所需的权限(我记得se_restore_privilege)。这导致代码在静默安装和卸载时中断,即使调用用户是Admin,我也不能禁止静默安装和卸载。

尚未出现的另一个问题是Active Directory。我不确定,但我认为你描述的内容会在AD环境中有明显的额外环节。

一般情况下,我会尽量避免安装或卸载HKCU配置单元。我发现这样做是为了获得最小的利益而成为重大痛苦的一致来源。

答案 2 :(得分:2)

无法完成,只删除当前用户的条目。

您可以使用ActiveSetup解决此问题,但除了该链接之外,它几乎没有文档,并且不受Microsoft支持。所以如果你使用它,不要依赖它;)

在卸载过程中不删除用户数据背后的想法是一个相当有争议的主题,有一些相当有趣的历史记录......我记得旧版本的Office用于保存安装目录下的文件,我们过去经常收到的数字投诉升级用户会删除旧的Office文件夹并丢失他们的文件是巨大的。最近,投诉是人们丢失了自定义Normal.dot模板。

作为涉及商业软件的人,我的观点是,如果人们依赖您的软件作为其办公室工作流程的一部分并花时间自定义设置,请不要在卸载期间删除设置。

从另一个角度来看,如果你卸载一个游戏,你已经沉睡了几小时/几天/几周 - 你想要删除你的存档吗?你的自定义配置文件?如果在共享家庭计算机上玩游戏,有人会卸载游戏以释放磁盘空间,而不知道其他家庭成员经常播放它。您想处理客户的这类投诉吗?