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

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

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

为什么大多数 Windows 应用程序都喜欢在注册表中留下自己的痕迹?这是 Windows 的错,还是开发人员的错?

答案1

因为这是不可能的。

注册表有多个根节点,但只有两个有趣的节点:本地机器当前用户。通常情况下,安装程序会将值写入 LocalMachine,而运行程序只会将值写入 CurrentUser(实际上,除非安装程序弄乱了权限,否则运行程序不能写入LocalMachine。

虽然将剩余部分保留在 LocalMachine 中是懒惰的行为,但正如其他答案所指出的那样,清理用户部分是不可能的。

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

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

但你根本就不应该尝试这个。如果你使用漫游配置文件(例如终端服务),然后在卸载时删除所有设置,那么你可能会搞砸并删除实际上仍在使用的内容。

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

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

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

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

答案2

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

下面列出了一些留下注册表项的情况和原因:

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

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

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

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

答案3

要删除剩余的注册表,请尝试使用 IOBIT 卸载程序。它是目前最好的卸载程序。此外,它是免费的。我一直在使用它。它具有强大的卸载功能,可以直接转到剩余注册表项所在的位置,在出现提示时单击复选框,然后删除注册表项。Iobit 附带其他程序,只需使用卸载程序即可删除它们

相关内容