题 如何找到在Windows中打开文件的进程?


让我感到厌烦的一件事就是老了 分享违规 错误。通常你无法确定是什么让它打开。通常它只是指向相关目录的编辑器或浏览器,但有时我不得不求助于重新启动我的机器。

有关如何找到罪魁祸首的任何建议?


478
2018-05-01 00:47




您可能会认为,在这段时间之后,Windows人员会在资源管理器中轻松地为我们提供一种方法。我想知道为什么没有发生这种情况? - Cawflands
我发现资源管理器经常是一个问题进程,它没有明显的原因。 - Eddie
我知道这对你没有多大帮助,但我想我记得这是vista和2008服务器之后的下一个Windows版本的计划功能。或者它可能是WinFS的东西。不知道我在哪里读到...... - Kip


答案:


我成功了 Sysinternals的  Process Explorer。这样,您可以搜索以查找打开文件的进程,如果需要,可以使用它来关闭句柄。当然,关闭整个过程更安全。谨慎和判断。

要查找特定文件,请使用菜单选项 Find->Find Handle or DLL...  键入文件路径的一部分。进程列表如下所示。

如果您更喜欢命令行,Sysinternals套件包括命令行工具 处理,列出打开的句柄。关于如何使用它的几个例子:

  • c:\Program Files\SysinternalsSuite>handle.exe |findstr /i e:\  - 查找从驱动器E打开的所有文件:
  • c:\Program Files\SysinternalsSuite>handle.exe |findstr /i file-or-path-in-question

417
2018-05-01 01:03



您可以关闭手柄,但请记住,您正在从应用程序中拉出地毯,结果将无法预测。 - WaldenL
@Walden:绝对的。因人而异。有了WinXP,我已经多次让资源管理器打开一个没有明显原因的句柄并且拒绝关闭它。如果在您需要删除的文件上发生这种情况,您可以选择强制关闭句柄或重新启动。到目前为止,已经做了几十次,我没有受到任何不良影响。与任何高级工具一样,谨慎使用并做出判断。 - Eddie
关闭句柄会导致应用程序重新使用另一个文件上的句柄,从而导致损坏 - 请参阅下面的Jeff的答案: serverfault.com/a/15695/79266 ...如果你不想重启,那么杀死打开文件的应用程序会更安全。 - RichVel
对于资源管理器,顺便说一句,按住ctrl-shift并右键单击开始菜单的空白区域,然后你会得到“退出资源管理器” - ps,不是杰夫的答案.. - Mark Sowul
它对非执行文件没有帮助。一个文本文件。我需要知道谁在写日志文件。任何的想法? - Xaqron


对于Windows 7,Windows 8和Windows 10,您可以使用内置的 资源监控 为了这。

  1. 打开 资源监控,可以找到
    • 通过搜索 resmon.exe 在开始菜单中,或
    • 作为一个按钮 性能 你的标签 任务管理器
  2. 选中旁边的复选框 图片 前往 流程 section(已检查的进程将在下面显示其文件句柄。)
  3. 使用中的搜索字段 相关句柄 关于 中央处理器 标签
    • 在下面的屏幕截图中用蓝色箭头指向

如果不是很明显,当您找到句柄时,可以通过查看图像和/或PID列来识别该过程。

然后,如果能够执行此操作,则可以关闭该应用程序,或者只需右键单击该行,您就可以选择在此处终止该进程。十分简单!

Resource Monitor screenshot

复制自我的原始答案: https://superuser.com/a/643312/62


147
2017-09-10 11:48



值得注意的是,在Windows 8上很难找到这个程序 - 搜索'resmon.exe'应该找到它。 - Kylotan
@Kylotan,停止浪费时间搜索。赶紧跑 resmon  直接来自cmd - Pacerier
@Pacerier:很好。我不习惯Windows路径中的东西。 - Kylotan
这比'Handle |更适合我FindStr'和'Unlocker'替代品,虽然它们也有效 - Marcus Vinicius Pompeu
在Windows 10中仍然有效,可以使用任务管理器 - >性能选项卡中的“打开资源监视器”按钮找到它。 - Norman Breau


试试吧 openFiles散 命令。


81
2018-05-01 01:18



内置命令的+1,虽然我个人大部分时间都使用ProcessExplorer。 - RBerteig
真有帮助。 - marko
错误:目标系统必须运行32位操作系统。 - Bozojoe
不适用于64 OS! - Jarrod Roberson
这看起来适用于Windows 2012R2 64bit,但您需要通过运行启用“开放本地跟踪”服务 openfiles /local on 并重新启动。这使得此功能不是很有用。 - Guss


关闭手柄时要小心;它比你想象的更危险,因为句柄回收 - 如果你关闭文件句柄,程序打开别的东西,你关闭的原始文件句柄可能会被重用于那个“别的东西”。现在猜猜如果程序继续会发生什么,认为它正在处理文件(你关闭它的句柄),实际上文件句柄现在指向其他东西。

看到 Raymond Chen的帖子 关于这个话题

假设一个搜索索引服务有一个文件打开索引,但有   暂时卡住了,你想要删除文件,所以你   (不明智地)强制把手关闭。搜索索引服务打开它   日志文件,以便记录一些信息,以及句柄   已删除的文件将作为日志文件的句柄进行回收。卡住了   操作最终完成,搜索索引服务终于得到了   关闭它已经打开的那个句柄,但它最终在不知不觉中结束了   关闭日志文件句柄。

搜索索引服务打开另一个   文件,说一个配置文件写,所以它可以更新一些   持久的状态。日志文件的句柄被回收为   处理配置文件。搜索索引服务想要   记录一些信息,以便写入其日志文件。不幸的是,   日志文件句柄已关闭,句柄重用于其配置   文件。记录的信息进入配置文件,   腐化它。

与此同时,你被迫关闭的另一个手柄被重复使用   作为互斥锁句柄,用于帮助防止数据进入   损坏。关闭原始文件句柄时,互斥锁句柄   已经关闭,对数据损坏的保护也会丢失。该   服务运行的时间越长,其索引就越破坏。   最终,有人注意到索引返回不正确的结果。   当您尝试重新启动服务时,它会失败,因为它   配置文件已损坏。

您将问题报告给   制作搜索索引服务的公司,他们确定了这一点   索引已损坏,日志文件已神秘停止   日志记录,配置文件被垃圾覆盖。一些   可怜的技术人员被分配了找出原因的绝望任务   服务破坏了它的索引和配置文件,没有意识到   腐败的根源是你强行关闭句柄。


76
2018-05-30 17:04



重要的警告,这应该更接近顶部 - 重启可能比一个安静的损坏文件更好。 - RichVel
+1这肯定会让我三思而后行逼近句柄!我觉得奇怪的是,Windows会立即重新使用已关闭句柄的数量,而不是继续增加数字,只在必要时包裹。这至少会大大减少这个问题发生的可能性。 - EM0
@RichVel终止罪魁祸首过程可能比完全重启更好。 - Dmitry Grigoryev
@DmitryGrigoryev - 好点,事实上我已经提到过了 这里 - RichVel
这是一个非常重要的警告,但没有回答这个问题 如何找到在Windows中打开文件的进程? - Ploni


我用过 处理 成功地找到过去的这样的过程。


27
2018-05-01 00:52



我一直都在使用这个工具。如果我无法弹出USB驱动器,我只需输入“handle H:”(或任何驱动器号)。最重要的是,你可以使用它强制关闭手柄。 - Chris Thompson


谁锁我 效果很好,让人们对这个名字感到好笑!


7
2018-05-06 00:43



在64位Windows 8和10中不起作用。 - rustyx


只是为了澄清,这更可能是由于行为不端的第三方应用程序没有使用 的CreateFile API调用正确,而不是Windows本身。也许这是CreateFile设计的结果,但已完成,我们无法回头。

基本上,在Windows程序中打开文件时,您可以选择指定允许共享访问的标志。如果未指定该标志,则程序将独占访问该文件。

现在,如果资源管理器似乎是这里的罪魁祸首,那可能就是表面上的情况,而真正的罪魁祸首就是安装了一个shell扩展,它可以打开文件夹中的所有文件,但是它也是gung-ho这样做,或者说自己没有正确清理。赛门铁克AV是我以前见过这样做的,如果其他AV程序也应该受到责备,我也不会感到惊讶。源控制插件也可能出错。

所以不是一个真正的答案,但只是一些建议,并不总是责怪Windows可能是一个写得不好的第三方程序(在任何其他具有隐式文件锁定的操作系统上也会发生这种情况,但任何基于unix的操作系统都有共享访问权限)默认)。


7
2017-10-12 14:27



我不会责怪第三方应用程序,因为我的Windows资源管理器总是将Thumbs.db文件锁定在其工作目录中,但在切换工作目录时并不总是解锁它。当我关闭窗户时,至少它们被解锁了,我不必杀死所有的探险家...... - Alexander
@Darth,你是微软的营销人员吗? - Pacerier


在远程服务器上,当您检查网络共享时,可以显示此信息并关闭该文件。


6
2018-05-01 01:01



确切地说,为什么会有这么复杂的答案? - Rohit Gupta


打开文件的Apropos Explorer:“当您需要删除文件时,您可以选择强制关闭句柄或重新启动。”

你可以结束资源管理器。

如果这是一次性的事情(资源管理器通常不会打开此文件),那么我猜测注销并重新登录就可以了。

否则,请终止桌面资源管理器进程,并在它消失时执行您想要的操作。首先启动cmd.exe的副本(您需要一个UI来进行预期的清理)。确保没有运行非桌面资源管理器。然后使用例如任务管理器终止最后一个资源管理器。在命令提示符下执行您想要的操作。最后,从命令提示符运行资源管理器,它将成为桌面。

我猜如果某些systray程序无法处理shell重启,可能会有一些残留的不愉快。


6
2018-06-03 14:01



这比关闭手柄更安全,并且比重新启动更具破坏性。也适用于其他程序 - 我经常发现即使在我关闭文件后,Microsoft Office程序也会对文件进行锁定。 - RichVel


Lockhunter(http://lockhunter.com/)适用于32和64位系统。


6
2017-10-12 13:06





有NirSoft的 打开文件视图 同样。


4
2018-05-01 02:12



我个人比这个特定任务更喜欢Process Explorer。 - JamesBarnett