为什么正常卸载不会从注册表中删除值?

Mar*_*der 23 windows windows-registry uninstall

扩展如何从注册表中删除已卸载软件的残留痕迹?-- 每次我卸载一个程序,然后通过 RegEdit 查找它时,它仍然存在!

为什么大多数 Windows 应用程序如此专注于在注册表中留下自己的微小痕迹?是 Windows 的错还是开发人员的错?

Luk*_*ger 31

因为这是不可能的。

注册表有多个根节点,但只有两个有趣的:LocalMachineCurrentUser。通常情况下,setup 将值写入 LocalMachine,而运行程序只写入 CurrentUser(实际上,除非 setup 弄乱了权限,否则运行程序无法写入 LocalMachine。)

正如其他答案所指出的那样,在 LocalMachine 中保留剩菜是一种懒惰,但无法清理 User 部分。

如果每台机器都安装了一个程序(大多数是)并且有多个用户使用它,卸载程序应该怎么做?它可以安全地删除当前帐户的用户设置,但当前帐户可能不是您的帐户。(如果您从非管理员帐户启动卸载程序,然后输入管理员帐户的凭据,则会发生这种情况 - 安装程序现在正在该帐户下运行,而不是第一个)。

其他用户呢?它可能会尝试枚举所有用户,但可能不会加载他们的注册表项。(Windows 很懒惰,只加载它需要的东西。)

但你甚至不应该尝试那个。如果您使用漫游配置文件,例如用于终端服务,然后在卸载时删除所有设置,您可能真的会搞砸并删除实际仍在使用的内容。

终端服务器基本上是一台 Windows 机器,多个用户同时登录并使用应用程序。

假设您有两台终端服务器运行一个应用程序。您在 TS1 上卸载应用程序,现在所有用户的所有设置都在 TS2 上消失了,因为您有漫游配置文件。哎呀。

这同样适用于每个用户目录中的文件。

在我公司程序的设置中,我删除了每台机器的内容,但不触及每用户的内容,甚至不触及当前运行安装程序的用户的内容。


Kel*_*ari 19

出现这种情况的原因有很多,但这不是 Microsoft 或 Windows 操作系统的错。

以下是离开注册表项背后的一些情况和原因的列表:

  • 糟糕的编程 - 开发人员没有正确编写应用程序卸载程序,并且留下了注册表项。除此之外,卸载程序可能没有/使用适当的权限来删除注册表项。也可能有多个应用程序使用这些密钥。例如,来自同一开发人员的两个应用程序写入相同的密钥。

  • 故意留下- 正如一条评论所提到的,这些条目可能是故意留下的。某些应用程序有试用期,在试用期过后,您可以选择删除该应用程序。如果您选择稍后重新安装应用程序,这些密钥会提供有关应用程序安装时间的信息。除此之外,一些开发人员可能会选择保留这些密钥,以防您选择重新安装应用程序。如果开发人员使用注册表项来存储您的自定义项,他们可能会将它们留在那里,因此当您重新安装所有自定义项时,它们仍然存在。在宏伟的计划中,注册表项只占用几个字节。

你应该删除钥匙吗?那要看。Windows 注册表是一个容易乱动的危险地方。您可能会无意中破坏您的系统。留下无关的键不会损害系统。有些人会说清理/整理注册表会加快您的系统速度,但这已被反复证明是错误的

如果你真的想摆脱这些程序,有一些卸载工具可以删除程序的每一个痕迹。这些程序将监视另一个程序的安装程序并记录对文件系统和注册表所做的所有操作,然后完全删除这些操作。使用这些工具的一个问题是,它是可能的,他们可以删除的东西,你可能要保持。

  • @phyrfox:“像 CCleaner 这样的程序可以让系统保持更快的速度” - 不,他们没有。“这就是为什么通常建议每 6-12 个月刷新/重新安装 Windows 以保持系统“健康”的原因。” - 典型的原因是人们不知道如何照顾他们的系统。我坐在这里打字一个 5 岁的安装已经看到大量使用并且没有明显的放缓。正是这些建议让公司继续兜售蛇油。 (10认同)
  • @phyrfox 如我的回答所述,注册表清洁剂是蛇油。他们根本没有帮助。 (3认同)