it-swarm.cn

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

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

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

538
cletus

我在 Sysinternals(Process Explorer )上取得了成功。这样,您可以搜索以查找哪些进程打开了文件,并且可以根据需要使用它来关闭句柄。当然,关闭整个过程更安全。谨慎行事和判断。

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

如果您喜欢命令行,Sysinternals Suite包括命令行工具 Handle ,其中列出了打开的句柄。有关如何使用它的一些示例:

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

您可以为此使用Resource Monitor,Windows 7、8和10附带内置

  1. 打开资源监视器,可以找到
    • 通过在开始菜单中搜索资源监视器resmon.exe,或
    • [任务管理器]中,单击Performance选项卡上的按钮
  2. 转到[〜#〜] cpu [〜#〜]选项卡
  3. Associated Handles部分中使用搜索字段
    • 请参见下面的屏幕截图中的蓝色箭头

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

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

Resource Monitor screenshot

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

195
Svish

尝试 openfiles 命令。

93
John Fouhy

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

参见 Raymond Chen的帖子 关于此主题

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

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

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

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

83
Mark Sowul

我过去曾经成功使用 Handle 查找此类过程。

29
Greg Hewgill

Lockhunter( http://lockhunter.com/ )可在32位和64位系统上运行。

11
Scoregraphic

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

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

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

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

7
Maximus Minimus

谁锁定了我 效果很好,让人们对这个名字感到很开心!

7
Generic Error

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

您可以结束浏览器。

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

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

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

6
dave

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

6
K. Brian Kelley

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

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

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

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

5
Dirk Paessler

使用 Process Hacker ,您可以轻松确定哪些进程正在保存文件:

Find Handles or DLLs

4
Ivan Kochurkin

还有NirSoft的 打开的文件视图

4
Christopher Galpin

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

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

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

2
Blair

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

0
user44304

不久前,Jeremy Zawodny的博客打开了 扩展任务管理器 ,这对于跟踪进程的更多信息也非常有用。上面的Process Explorer也是+1,尤其是对于杀死标准Task Manager不会结束的进程。

0
nedm