澄清一下,这更有可能是由于行为不端的第 3 方应用程序未正确使用CreateFile API 调用的结果,而不是 Windows 本身的任何内容。也许这是 CreateFile 设计的结果,但是完成了,我们不能回去了。
基本上,在 Windows 程序中打开文件时,您可以选择指定允许共享访问的标志。如果您不指定标志,程序将独占访问该文件。
现在,如果 Explorer 似乎是这里的罪魁祸首,那可能只是表面上的情况,而真正的罪魁祸首是安装了一个 shell 扩展程序,该扩展程序会出于自己的目的打开文件夹中的所有文件,但要么也是gung-ho 这样做,或者它本身不能正确清理。赛门铁克 AV 是我以前见过这样做的,如果其他 AV 程序也受到指责,我不会感到惊讶。源代码控制插件也可能有问题。
我在Sysinternals Process Explorer上取得了成功。有了这个,您可以搜索以查找打开文件的进程,如果需要,您可以使用它来关闭句柄。当然,关闭整个过程更安全。谨慎行事并做出判断。
要查找特定文件,请使用菜单选项
Find->Find Handle or DLL...
键入文件的部分路径。进程列表将显示在下方。如果您更喜欢命令行,Sysinternals 套件包括命令行工具Handle,它列出了打开的句柄。
例子
c:\Program Files\SysinternalsSuite>handle.exe |findstr /i "e:\"
(查找从驱动器打开的所有文件e:\
“c:\Program Files\SysinternalsSuite>handle.exe |findstr /i "file-or-path-in-question"
您可以为此使用 Windows 7、8 和 10内置的资源监视器。
找到句柄后,您可以通过查看 Image 和/或 PID 列来识别进程。
然后,您可以像往常一样尝试关闭应用程序,或者,如果不可能,只需右键单击句柄并直接从那里终止进程。十分简单!
从我原来的答案复制:https ://superuser.com/a/643312/62
关闭手柄时要非常小心;由于句柄回收,它比您想象的更危险 - 如果您关闭文件句柄,并且程序打开了其他东西,那么您关闭的原始文件句柄可能会被重新用于“其他东西”。现在猜猜如果程序继续运行会发生什么,认为它正在处理文件(您关闭了它的句柄),而实际上该文件句柄现在指向其他东西。
请参阅Raymond Chen关于此主题的帖子
试试openfiles命令。
openfiles /local on
您可能必须通过运行和重新启动来启用本地打开文件的列表。我过去曾成功使用Handle来找到此类过程。
Lockhunter ( http://lockhunter.com/ ) 适用于 32 位和 64 位系统。
澄清一下,这更有可能是由于行为不端的第 3 方应用程序未正确使用CreateFile API 调用的结果,而不是 Windows 本身的任何内容。也许这是 CreateFile 设计的结果,但是完成了,我们不能回去了。
基本上,在 Windows 程序中打开文件时,您可以选择指定允许共享访问的标志。如果您不指定标志,程序将独占访问该文件。
现在,如果 Explorer 似乎是这里的罪魁祸首,那可能只是表面上的情况,而真正的罪魁祸首是安装了一个 shell 扩展程序,该扩展程序会出于自己的目的打开文件夹中的所有文件,但要么也是gung-ho 这样做,或者它本身不能正确清理。赛门铁克 AV 是我以前见过这样做的,如果其他 AV 程序也受到指责,我不会感到惊讶。源代码控制插件也可能有问题。
所以并不是一个真正的答案,而只是一些建议,不要总是将可能是写得不好的第 3 方程序归咎于 Windows(这也可能发生在任何其他具有隐式文件锁定的操作系统上,但任何基于 unix 的操作系统都具有共享访问权限默认)。
在远程服务器上,当您检查网络共享时,像计算机管理控制台这样简单的东西可以显示此信息并关闭文件。
Who Lock Me效果很好,让人们对这个名字感到好笑!
Apropos Explorer 保持打开文件:“当您需要删除的文件发生这种情况时,您可以选择强制关闭句柄或重新启动。”
您可以结束资源管理器。
如果这是一次性的事情(Explorer 通常不会打开此文件),那么我猜想注销并重新登录就可以了。
否则,请终止桌面资源管理器进程并在它消失时执行您想要的操作。首先启动 cmd.exe 的副本(您需要一个 UI 来进行预期的清理)。确保没有运行非桌面资源管理器。然后用例如任务管理器杀死最后一个资源管理器。在命令提示符下做你想做的事。最后,从命令提示符运行资源管理器,它将成为桌面。
我猜如果某些系统托盘程序无法处理外壳重新启动,可能会有一些残留的不愉快。