您如何找到在Windows中打开文件的过程?


515

让我烦恼不了Windows的一件事是旧的共享冲突错误。通常,您无法确定是什么使它处于打开状态。通常,它只是指向相关目录的编辑器或资源管理器,但有时我不得不求助于重新启动计算机。

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


12
您可能会认为,经过所有这些时间,Windows专家会为我们提供一种从资源管理器中轻松完成此操作的方法。我不知道为什么这没有发生?
考夫兰兹

6
我发现资源管理器经常是没有明显原因而保留在文件上的问题过程。
Eddie

我知道这对您没有太大帮助,但我想我记得这是vista和2008 Server之后的下一个Windows版本的计划功能。也许这是WinFS的事情。不知道我在哪里读到的……
Kip

这里查看我对超级用户的回答,以总结OpenedFilesView在2019
Vijay

Answers:


440

我在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

17
您可以合上手柄,但请记住,您是从应用程序下面拉出地毯,结果充其量是不可预测的。
WaldenL

12
@沃登:绝对。YMMV。使用WinXP,我有很多次没有明显的原因打开资源管理器并拒绝将其关闭。当您需要删除文件的文件时,可以选择强制关闭句柄或重新启动。到目前为止,已经做了数十次,我没有受到任何不良影响。与任何高级工具一样,请谨慎使用。
艾迪(Eddie)

5
关闭句柄可能会导致应用重新使用另一个文件上的句柄,从而导致损坏-请参阅以下Jeff的回答:serverfault.com/a/15695/79266 ...如果您将文件保持打开状态,则杀死该应用的安全性更高不想重启。
RichVel 2012年

14
对于探险家,顺便说一句,按住CTRL键移,然后右键单击开始菜单的空白区域,你会得到“退出资源管理器” - ps的,不太Jeff的答案..
马克Sowul

2
对于非执行文件,例如文本文件,这无济于事。我需要知道谁在写日志文件。任何想法?
Xaqron

183

您可以为此使用Windows 7、8和10 内置资源监视器

  1. 打开资源监视器,可以找到
    • 通过在开始菜单中搜索Resource Monitorresmon.exe,或
    • 作为任务管理器中性能”选项卡上的按钮
  2. 转到“ CPU”选项卡
  3. 使用搜索栏相关手柄部分
    • 请参见下面的屏幕截图中的蓝色箭头

找到手柄后,可以通过查看“图像”和/或“ PID”列来识别该过程。

然后,您可以尝试像往常一样关闭该应用程序,或者,如果不可能的话,只需右键单击该句柄并直接从那里终止该进程。十分简单!

资源监视器屏幕截图

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


2
值得注意的是,在Windows 8上很难找到该程序-搜索'resmon.exe'应该找到它。
Kylotan

4
@Kylotan,别再浪费时间了。只要运行resmon 直接从CMD
Pacerier

1
@Pacerier:很好。我不习惯Windows路径中的东西。
Kylotan 2015年

这比'Handle |'更适合我。FINDSTR”和‘解锁’的替代品,虽然它们也是有效的
马库斯·维尼修斯庞培法布拉

4
在Windows 10中仍然有效,可以通过使用“任务管理器”->“性能”选项卡中的“打开资源监视器”按钮找到。
诺曼·布劳

92

尝试使用openfiles命令。


10
内置命令+1,尽管我大部分时间都是亲自使用ProcessExplorer。
RBerteig

真的很有帮助。
marko

7
错误:目标系统必须正在运行32位OS。
Bozojoe 2012年

4
不适用于64 OS!

12
这似乎适用于Windows 2012R2 64位,但是您需要通过运行openfiles /local on和重新启动来启用“打开本地跟踪”服务。这使得此功能不是很有用。
2015年

82

小心关闭手柄;由于句柄回收,这甚至比您想象的还要危险-如果关闭文件句柄,并且程序打开其他内容,则关闭的原始文件句柄可能会被“其他”重用。现在猜想如果程序继续运行,以为它正在处理文件(关闭了它的句柄),而实际上文件句柄现在指向其他东西,会发生什么。

参见Raymond Chen关于该主题的文章

假设搜索索引服务打开了一个文件以供建立索引,但暂时被卡住,并且您想删除该文件,因此(不明智地)强行关闭句柄。搜索索引服务打开其日志文件以记录一些信息,然后将删除文件的句柄作为日志文件的句柄进行回收。卡住的操作最终完成,搜索索引服务最终解决关闭它已打开的句柄的问题,但最终却无意间关闭了日志文件句柄。

搜索索引服务会打开另一个文件,例如要写入的配置文件,以便它可以更新某些持久状态。日志文件的句柄作为配置文件的句柄被回收。搜索索引服务希望记录一些信息,因此将其写入其日志文件。不幸的是,日志文件句柄已关闭,并且该句柄已重新用于其配置文件。记录的信息进入配置文件,从而损坏它。

同时,您强制关闭的另一个句柄被重新用作互斥锁句柄,用于帮助防止数据损坏。当关闭原始文件句柄时,互斥锁句柄将关闭,并且防止数据损坏的保护也会丢失。服务运行的时间越长,其索引就越损坏。最终,有人注意到索引返回了错误的结果。并且,当您尝试重新启动服务时,该服务将失败,因为其配置文件已损坏。

您将该问题报告给提供搜索索引服务的公司,他们确定索引已损坏,日志文件神秘地停止了日志记录,并且配置文件被垃圾覆盖。一些糟糕的技术人员被赋予了无望的任务,以弄清该服务为何破坏其索引和配置文件,而没有意识到破坏的根源是您强行关闭了句柄。


12
重要警告,应该越靠近顶部-重新启动可能比静默损坏的文件更好。
RichVel 2012年

6
+1这肯定会让我三思而行。Windows会立即重用闭合句柄的数量,而不是继续增加数量并仅在必要时进行环绕,这对我来说似乎很奇怪。这至少会大大减少发生此问题的机会。
EM0 2014年

1
@RichVel终止罪魁祸首的过程可能比完全重新启动更好。
德米特里·格里戈里耶夫

@DmitryGrigoryev-好点,实际上我已经在这里
RichVel

2
这是一个非常重要的警告,但不能回答以下问题:如何查找在Windows中打开文件的进程?
Ploni

29

我过去曾成功地使用过Handle来找到这样的过程。


3
我一直在使用这个工具。如果无法弹出USB驱动器,则只需键入“ handle H:”(或任何驱动器号)。最重要的是,您可以使用它来强制关闭手柄。
克里斯·汤普森



7

我想弄清楚,这更可能是行为不端不使用第三方应用程序的结果的CreateFile正确的API调用比它是Windows本身的东西。也许这是CreateFile设计的结果,但是已经完成了,我们不能回头。

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

现在,如果“资源管理器”似乎是罪魁祸首,那么可能只是表面上的问题,而真正的罪魁祸首是安装了shell扩展程序,出于自身目的,该扩展程序会打开文件夹中的所有文件,但要么gung-ho这样做,否则无法正确清理。Symantec AV是我以前见过的事情,如果还要归咎于其他AV程序,我也不会感到惊讶。源代码控制插件也可能有故障。

因此,这并不是一个真正的答案,而只是一些建议,不要总是将Windows编写不当的第三方程序归咎于Windows(在具有隐式文件锁定功能的任何其他OS上也会发生这种情况,但是任何基于UNIX的OS都可以通过默认)。


1
我不会责怪第三方应用程序,因为我的Windows资源管理器始终将Thumbs.db文件锁定在其工作目录中,但是当我切换工作目录时并不总是将其解锁。至少当我关闭窗户时,它们已解锁,我不必杀死所有探险家……
亚历山大

@Darth,您是Microsoft的营销商吗?
起搏器

6

在远程服务器上,当您检查网络共享时,诸如“计算机管理”控制台之类的简单操作可以显示此信息并关闭文件。


确实,为什么会有这么复杂的答案?
罗希特·古普塔

6

Apropos Explorer使文件保持打开状态:“在文件上发生这种情况时,您需要删除它,您可以选择强制关闭句柄或重新启动。”

您可以结束浏览器。

如果这是一次性的事情(Explorer通常不会将此文件保持打开状态),那么我猜注销并重新登录将达到目的。

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

我猜想,如果某些系统托盘程序无法处理Shell重新启动,可能还会有一些不愉快的地方。


1
这比关闭手柄安全得多,并且比重新启动破坏性小。同样适用于其他程序-我经常发现Microsoft Office程序即使在关闭文件后也可以保留文件上的锁。
RichVel 2012年

5

可以通过本地进程(使用解锁工具)和通过共享进入的文件访问来锁定文件。

Windows中有一个内置功能,向您显示本地计算机上的哪些文件被远程计算机打开/锁定(通过文件共享打开文件):

* Select "Manage Computer" (Open "Computer Management")
* click "Shared Folders"
* choose "Open Files"

您甚至可以在那里强制关闭文件。




2

上面提到的答案涵盖了程序进程将文件句柄保持打开状态的情况(幸运的是,大多数情况下是这样),但是在某些情况下(如当前在此系统上发生的情况),系统本身拥有文件句柄打开。

您可以通过按照上面的使用进程资源管理器查找文件句柄保存过程的说明,并注意该过程名称被列为“系统”,或者按照使用资源监视器的说明进行操作,并注意没有显示图像,从而可以确定这种情况。在您感兴趣的文件上打开一个文件句柄(尽管显然有些事情可以做,因为您无法编辑/删除等)。

如果发生这种情况,您的选择(据我所知)是重新启动-或忘记对该文件执行任何操作。


0

不久前,我由Jeremy Zawodny的博客启用了Extendeded Task Manager,这对于跟踪有关流程的更多信息也非常有用。上面的Process Explorer也是+1,特别是对于杀死标准Task Manager不会结束的进程。


0

有一个工具FILEMON,它显示打开的文件和句柄。如果您实时观看它,则很难跟上其显示的步伐,它是如此之快。但是您可以阻止它实时显示,并且可以观看所有文件打开/写入活动。现在由Microsoft拥有,但最初由Sysinternals拥有


1
它的更新版本是过程监视器。您可以在这里获得它:http
//technet.microsoft.com/zh-cn/sysinternals/bb896645
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.