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

Windows installer 卸载软件时如何删除HKCU注册表项?,windows-installer,registry,Windows Installer,Registry,当我的软件通过MSI安装后,它会在HKLM中创建一些注册表项。当人们使用该软件时,他们的个人偏好会保存到香港大学。卸载软件时,HKLM和HKCU注册表项将被删除,但我认为只有运行卸载的用户的HKCU注册表项才会被删除。这是正确的吗?如果是,我如何确保删除在同一台计算机上使用过我的软件的其他人的HKCU子密钥 更新:在我的案例中保存的“个人首选项”实际上不是用户选择的设置,而是应用程序为该用户运行时存储的数据。因此,用户并不想保留真正的数据。在卸载时删除它似乎是正确的,因为如果重新安装应用程序,它

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


更新:在我的案例中保存的“个人首选项”实际上不是用户选择的设置,而是应用程序为该用户运行时存储的数据。因此,用户并不想保留真正的数据。在卸载时删除它似乎是正确的,因为如果重新安装应用程序,它将没有任何用处。所以我想目前为止最好的建议是,尽管这并不能真正解决最初的问题

无法执行,仅删除当前用户的条目

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

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

作为业务软件的相关人员,我的观点是,如果人们将您的软件作为其office工作流程的一部分,并花时间自定义设置,请不要在卸载过程中删除设置


从另一个角度来看,如果你卸载了一款游戏,而你已经投入了数小时/数天/数周的时间去玩——你想删除你的savegames吗?您的自定义配置文件?共享家庭电脑上的游戏怎么样?有人卸载游戏以释放磁盘空间,却不知道其他家庭成员定期玩游戏。您想处理客户的此类投诉吗?

简而言之,您不想。支持安装程序删除它创建的条目,而不删除其他内容。如果您的应用程序在运行时创建每用户设置,则这些设置不属于安装例程

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


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

如果您确实希望能够消除用户数据,请将用户数据存储在文件系统中。例如“文档和设置\用户名\应用程序数据\您的组织\您的应用程序”。如果在RemoveFile表中有一个条目,在卸载时删除这些数据将是微不足道的

Windows Installer开发团队在他们的博客上特别提到了这一点。见“规则26”。

更新:

许多年前,我编写的代码与您在注册表中描述的一样,很快就后悔了。这是一个痛苦,但更重要的是,它有一个与特权有关的问题。简短的版本是,安装程序服务并没有以管理员拥有的所有权限运行。它们不仅被禁用,而且在进程的安全令牌中不存在。值得注意的是,这包括加载和卸载注册表配置单元所需的特权(我记得,se_restore_特权)。这导致代码中断,无法进行静默安装和卸载,即使调用的用户是Admin,我不能仅仅禁止静默安装和卸载

另一个尚未出现的问题是Active Directory。我不确定,但我认为你所描述的在广告环境中会有很多额外的障碍


一般来说,我会尽力避免安装或卸载触动HKCU配置单元。我发现这样做会带来极大的痛苦,但好处却微乎其微。

>如果人们将您的软件作为办公工作流程的一部分,并花时间自定义设置,请不要在卸载过程中删除设置。难道我不能循环浏览HKEY_用户的每个子树并删除我的数据吗?或者你说的速度很慢?在使用漫游配置文件的情况下,以这种方式删除数据是危险的。我在细节上有点模糊,但我认为这会搞砸时间戳比较,如果选择不正确的配置文件作为“合并”的赢家,可能会导致配置文件数据丢失。好的,请确认它不是“您的数据”。一旦它在用户注册表配置单元中,它就是用户的数据。是的,加载和卸载单独的用户配置单元相当慢。而且,您需要谨慎地对系统帐户配置文件不做任何操作,因此首先需要确定常规用户配置文件。正如MichaelU提到的,如果漫游配置文件正在使用中,您可能会导致不属于您的应用程序的东西被损坏(您真的希望客户IT团队给您打电话,向您支付重建所有用户配置文件的费用吗?)。这是一个坏主意。请参阅上文Ed的回答,以了解更好的计划。