你如何find在Windows中保存文件的进程?

有一件事情让我对Windows感到恼火,就是旧的共享冲突错误。 通常你不能确定是什么让它开放。 通常它只是一个编辑器或资源pipe理器只是指向一个相关的目录,但有时我不得不求助于重新启动我的机器。

任何build议如何find罪魁祸首?

我已经成功与Sysinternals 进程资源pipe理器 。 通过这种方式,您可以search以查找哪个进程打开了一个文件,如果需要,可以使用它来closures句柄。 当然,closures整个过程是比较安全的。 谨慎和判断。

要查找特定文件,请使用菜单选项Find->Find Handle or DLL...键入文件的部分path。 进程列表将出现在下面。

如果你喜欢命令行,Sysinternals suite包含命令行工具Handle ,它列出了打开的句柄。 几个关于如何使用它的例子:

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

对于Windows 7和Windows 8,您可以使用内置的资源监视器

  1. 打开资源监视器 ,可以find
    • 通过在开始菜单中searchresmon.exe ,或者
    • 作为您的任务pipe理器中 性能选项卡上的button
  2. 选中“ 进程”部分的图像标题旁边的checkbox(选中的进程将在下面显示其文件句柄。)
  3. 使用CPU选项卡上“ 关联的手柄”部分中的search字段
    • 在下面的屏幕截图中的蓝色箭头指向

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

你可以closures应用程序,如果你能够做到这一点,或者只需右键单击该行,你会得到在那里杀死进程的选项。 十分简单!

资源监视器截图

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

尝试openfiles命令。

closures手柄时要非常小心; 它比你想像的更危险,因为处理回收 – 如果你closures了文件句柄,并且程序打开了别的东西,那么你closures的原始文件句柄可能会被重用于“别的东西”。 现在猜猜如果程序继续,会发生什么情况,认为它正在处理文件(其closures的句柄),而实际上该文件句柄现在指向其他内容。

请参阅Raymond Chen在这个话题上的post

假设一个search索引服务有一个打开文件的索引,但是暂时被卡住了,你想删除这个文件,所以你(不明智的)强制closures句柄。 search索引服务将打开其日志文件以logging一些信息,并将删除的文件的句柄作为日志文件的句柄进行回收。 卡住的操作终于完成了,search索引服务终于开始closures那个已经打开的句柄,但最终无意中closures了日志文件句柄。

search索引服务打开另一个文件,比如写一个configuration文件,这样它就可以更新一些持久状态。 日志文件的句柄被回收为configuration文件的句柄。 search索引服务想要logging一些信息,所以它写入到它的日志文件中。 不幸的是,日志文件句柄已closures,并且该句柄被重用于其configuration文件。 logging的信息进入configuration文件,破坏它。

同时,另一个强制closures的句柄被重用为一个互斥句柄,用于帮助防止数据被破坏。 原始文件句柄closures时,互斥句柄closures,防止数据损坏的保护function将丢失。 服务运行的时间越长,它的索引变得越坏。 最终,有人注意到索引返回的结果不正确。 而当您尝试重新启动服务时,由于其configuration文件已损坏而失败。

您将问题报告给制作search索引服务的公司,并确定索引已损坏,日志文件已神秘停止logging,并且configuration文件被垃圾覆盖。 一些可怜的技术人员被分配了一个绝望的任务,弄清楚为什么服务会破坏其索引和configuration文件,而不知道这个腐败的根源在于你强制closures了一个句柄。

我已经使用Handle成功地find了过去的这些stream程。

谁locking我运作良好,让人们的名字感到好笑!

只是为了澄清,这更可能是不正确使用CreateFile API调用的第三方应用程序的错误行为,而不是Windows本身的任何东西。 也许这是CreateFiledevise的结果,但是完成了,我们不能回头。

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

现在,如果资源pipe理器似乎是这里的罪魁祸首,情况可能就是这样,真正的罪魁祸首是安装一个shell扩展,它打开文件夹中的所有文件,为了自己的目的,但也是这样做,还是不能自行清理。 赛门铁克AV是我以前见过的,我也不会感到惊讶,如果其他AV程序也是怪罪。 源代码pipe理插件也可能是错误的。

所以不是一个真正的答案,但只是一些build议,并不总是责怪Windows可能是一个写得不好的第三方程序(也可能发生在任何其他操作系统有隐式文件locking,但任何基于Unix的操作系统共享访问默认)。

在远程服务器上,当您检查networking共享时,“计算机pipe理”控制台等简单操作可以显示此信息并closures文件。

Apropos Explorer打开一个文件:“当这个文件需要删除时,你可以select强制closures句柄,或重新启动。”

你可以结束资源pipe理器。

如果这是一次性的事情(资源pipe理器通常不会把这个文件打开),那么我会猜测注销并重新login将会伎俩。

否则,杀死桌面资源pipe理器进程,并做了你想要的,当它走了。 首先启动一个cmd.exe的副本(你需要一个用户界面来完成你想要的清理)。 确保没有非桌面浏览器正在运行。 然后杀死最后一个资源pipe理器,例如任务pipe理器。 在命令提示符下执行所需操作。 最后,从命令提示符运行资源pipe理器,它将成为桌面。

我猜可能会有一些残留的不愉快,如果一些系统托pipe程序不能处理重新启动shell。

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

文件可以被本地进程locking( 解锁器是使用的工具),也可以通过共享文件访问。

在Windows中有一个内置函数,显示本地计算机上的哪些文件被远程计算机(通过文件共享打开文件)打开/locking:

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

在那里,你甚至可以强制closures文件。

还有NirSoft的打开的文件视图 。

上面提到的答案涵盖了程序进程保持文件句柄打开的情况,幸运的是在大多数情况下 – 但是在某些情况下(就像在这个系统上那样),系统本身拥有一个文件句柄打开。

你可以按照上面的stream程资源pipe理器find文件句柄持有进程的说明,并注意进程名称被列为“系统”,或遵循使用资源监视器的说明并注意到没有图像显示在你感兴趣的文件上打开一个文件句柄(虽然很明显,你不能编辑/删除文件等)。

如果发生这种情况,您的select(据我所知)是重新启动 – 或者忘记对该文件做任何事情。

前一段时间,我被Jeremy Zawodny的博客转向了Exteneded Task Manager ,对于追踪进程的进一步信息也很有帮助 。 对于Process Explorer也是如上所述的+1,特别是对于杀死标准任务pipe理器不会结束的进程。

有一个工具FILEMON,并显示打开的文件和句柄。 如果你现场观看它,它很难跟上它的显示,它很快。 但是你可以阻止它显示生活,你可以看到所有的文件打开/写入活动。 现在由微软拥有,但最初由Sysinternals拥有

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

查找句柄或DLL