如何查找 Windows 中哪个进程正在打开某个文件?

如何查找 Windows 中哪个进程正在打开某个文件?

Windows 最让我恼火的一点就是老旧的共享违规错误。通常你无法确定是什么让它保持打开状态。通常它只是一个指向相关目录的编辑器或资源管理器,但有时我不得不重启我的机器。

关于如何找到罪魁祸首有什么建议吗?

答案1

我曾成功系统内部 进程探索器。通过这个,您可以搜索哪些进程打开了文件,并且您可以根据需要使用它来关闭句柄。当然,关闭整个进程更安全。请谨慎并做出判断。

要查找特定文件,请使用菜单选项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"

答案2

您可以使用资源监控因为这将会发生内置适用于 Windows 7、8 和 10。

  1. 打开资源监控,可以发现
    • 通过搜索资源监控或者 恢复工具在开始菜单中,或
    • 作为表现选项卡中的任务管理器
  2. 前往中央处理器标签
  3. 使用搜索字段在里面关联句柄部分
    • 参见下面屏幕截图中的蓝色箭头

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

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

资源监视器截图

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

答案3

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

Raymond Chen 的帖子关于这个话题

假设搜索索引服务打开了一个文件进行索引,但暂时卡住了,而您想要删除该文件,因此您(不明智地)强制关闭句柄。搜索索引服务打开其日志文件以记录一些信息,并且已删除文件的句柄被回收用作日志文件的句柄。卡住的操作最终完成,搜索索引服务最终关闭了它打开的句柄,但它最终无意中关闭了日志文件句柄。

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

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

您向提供搜索索引服务的公司报告了这个问题,他们确定索引已损坏,日志文件莫名其妙地停止了记录,配置文件被垃圾覆盖。一些可怜的技术人员被分配了一项无望的任务,即找出服务损坏其索引和配置文件的原因,而他们不知道损坏的根源是您强制关闭了句柄。

答案4

我用过处理并在过去成功发现了此类过程。

相关内容