这是我在Windows XP中经常遇到的一个问题。 我以为我现在会摆脱,但我错了。 它出现了一些应用程序,特别是与服务相关的应用程序,在我们的案例中,Symantec Endpoint Protection 无法正确释放registry项的句柄 。 显然没有什么新的 。 不,我不使用BitLocker在这种情况下,我很确定我们没有启用篡改保护(这不是BIOS默认,我们懒惰那样)。 看来UPHClean可能根本不支持Windows 7。 有没有其他的方式来强制registry句柄closures?
警告:我不build议这样做!
但是既然你问了…
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中使用,而Powershell 2则是在Windows 7中开发的。
但是请不要复制粘贴我的脚本并运行它。 考虑一下如果你试图closures系统中的每个registry句柄,那么它会在你的系统上造成的破坏。 例如,我的第一个build议是将其范围仅限于错误地将句柄打开的过程。
就我个人而言,我高度怀疑,解决您所遇到的任何问题比强制closures句柄还有更好的方法。 而你在@MattLyons的回答中向你展示的对Windows的敌对态度使我相信你可能超出了你的元素,可能会误解这个问题。 让我们知道您遇到的实际问题可能会更有帮助。 强制closures手柄可能不是解决问题的最佳方法。
但我无法抗拒脚本化的诱惑。 这就像一种疾病。
Procexp可以closures句柄。 使用查找 – >查找句柄或DLLfind你想要的,点击它(它将出现在底部窗格的列表中),然后右键 – >closures。