如何在 Windows 7 中强制关闭注册表项句柄?

如何在 Windows 7 中强制关闭注册表项句柄?

这是我在 Windows XP 中经常遇到的一个问题。我以为现在就可以解决了,但我错了。似乎有些应用程序,特别是与服务相关的应用程序,在我们的例子中是 Symantec Endpoint Protection,无法正确释放注册表项的句柄。 明显地没什么新鲜的。不,我在这个例子中没有使用 BitLocker,而且我很确定我们没有启用篡改保护(它不是 BIOS 默认设置,我们就是这么懒)。看来优必洁可能根本不支持 Windows 7。还有其他方法可以强制关闭注册表句柄吗?

答案1

警告:我不建议这样做!

但既然你问了...

Foreach($p In Get-Process) 
{ 
    $Handles = \\live.sysinternals.com\Tools\handle.exe -p $p.ProcessName -a
    ForEach($h In $Handles)
    {
        If($h.Contains(": Key"))
        {
            \\live.sysinternals.com\Tools\handle.exe -c $h.Split(':')[0].Trim() -p $p.Id
        }
    }
}

这是用 Powershell 3 编写的,但它也可以在 Powershell 2 中运行,它是开箱即用的 Windows 7 内置版本。

但请不要直接复制粘贴我的脚本并运行它。想想如果你不顾一切地试图关闭系统上的每个注册表句柄,它会对系统造成多大的破坏。例如,我的第一个建议是将其范围限定为仅有的错误地保持句柄打开的进程。

就我个人而言,我非常怀疑有比强制关闭句柄更好的方法来解决您的问题。而您在 @MattLyons 回答的评论中对 Windows 表现出的敌对态度让我相信您可能不适应并且可能误解了问题。让我们知道您遇到的实际问题可能会更有帮助。强制关闭句柄可能不是解决问题的最佳方法。

但我无法抗拒编写脚本的诱惑。这就像是一种疾病。

答案2

进程可以关闭句柄。使用“查找”->“查找句柄或 DLL”找到所需的句柄或 DLL,单击它(它将出现在底部窗格的列表中),然后右键单击->关闭。

相关内容