让我烦恼不了Windows的一件事是旧的共享冲突错误。通常,您无法确定是什么使它处于打开状态。通常,它只是指向相关目录的编辑器或资源管理器,但有时我不得不求助于重新启动计算机。
关于如何找到罪魁祸首的任何建议?
让我烦恼不了Windows的一件事是旧的共享冲突错误。通常,您无法确定是什么使它处于打开状态。通常,它只是指向相关目录的编辑器或资源管理器,但有时我不得不求助于重新启动计算机。
关于如何找到罪魁祸首的任何建议?
Answers:
我在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
您可以为此使用Windows 7、8和10 内置的资源监视器。
找到手柄后,可以通过查看“图像”和/或“ PID”列来识别该过程。
然后,您可以尝试像往常一样关闭该应用程序,或者,如果不可能的话,只需右键单击该句柄并直接从那里终止该进程。十分简单!
从我的原始答案复制:https : //superuser.com/a/643312/62
resmon
直接从CMD
小心关闭手柄;由于句柄回收,这甚至比您想象的还要危险-如果关闭文件句柄,并且程序打开其他内容,则关闭的原始文件句柄可能会被“其他”重用。现在猜想如果程序继续运行,以为它正在处理文件(关闭了它的句柄),而实际上文件句柄现在指向其他东西,会发生什么。
参见Raymond Chen关于该主题的文章
假设搜索索引服务打开了一个文件以供建立索引,但暂时被卡住,并且您想删除该文件,因此(不明智地)强行关闭句柄。搜索索引服务打开其日志文件以记录一些信息,然后将删除文件的句柄作为日志文件的句柄进行回收。卡住的操作最终完成,搜索索引服务最终解决关闭它已打开的句柄的问题,但最终却无意间关闭了日志文件句柄。
搜索索引服务会打开另一个文件,例如要写入的配置文件,以便它可以更新某些持久状态。日志文件的句柄作为配置文件的句柄被回收。搜索索引服务希望记录一些信息,因此将其写入其日志文件。不幸的是,日志文件句柄已关闭,并且该句柄已重新用于其配置文件。记录的信息进入配置文件,从而损坏它。
同时,您强制关闭的另一个句柄被重新用作互斥锁句柄,用于帮助防止数据损坏。当关闭原始文件句柄时,互斥锁句柄将关闭,并且防止数据损坏的保护也会丢失。服务运行的时间越长,其索引就越损坏。最终,有人注意到索引返回了错误的结果。并且,当您尝试重新启动服务时,该服务将失败,因为其配置文件已损坏。
您将该问题报告给提供搜索索引服务的公司,他们确定索引已损坏,日志文件神秘地停止了日志记录,并且配置文件被垃圾覆盖。一些糟糕的技术人员被赋予了无望的任务,以弄清该服务为何破坏其索引和配置文件,而没有意识到破坏的根源是您强行关闭了句柄。
我想弄清楚,这更可能是行为不端不使用第三方应用程序的结果的CreateFile正确的API调用比它是Windows本身的东西。也许这是CreateFile设计的结果,但是已经完成了,我们不能回头。
基本上,在Windows程序中打开文件时,您可以选择指定允许共享访问的标志。如果未指定标志,则程序将以独占方式访问文件。
现在,如果“资源管理器”似乎是罪魁祸首,那么可能只是表面上的问题,而真正的罪魁祸首是安装了shell扩展程序,出于自身目的,该扩展程序会打开文件夹中的所有文件,但要么gung-ho这样做,否则无法正确清理。Symantec AV是我以前见过的事情,如果还要归咎于其他AV程序,我也不会感到惊讶。源代码控制插件也可能有故障。
因此,这并不是一个真正的答案,而只是一些建议,不要总是将Windows编写不当的第三方程序归咎于Windows(在具有隐式文件锁定功能的任何其他OS上也会发生这种情况,但是任何基于UNIX的OS都可以通过默认)。
Apropos Explorer使文件保持打开状态:“在文件上发生这种情况时,您需要删除它,您可以选择强制关闭句柄或重新启动。”
您可以结束浏览器。
如果这是一次性的事情(Explorer通常不会将此文件保持打开状态),那么我猜注销并重新登录将达到目的。
否则,请终止桌面资源管理器进程,并在进程消失后执行所需的操作。首先启动cmd.exe的副本(您需要使用UI进行预期的清理)。确保没有运行非桌面资源管理器。然后使用例如任务管理器杀死最后一个资源管理器。在命令提示符下执行所需的操作。最后,从命令提示符运行Explorer,它将成为桌面。
我猜想,如果某些系统托盘程序无法处理Shell重新启动,可能还会有一些不愉快的地方。
使用Process Hacker,您可以轻松识别哪些进程正在保存文件:
不久前,我由Jeremy Zawodny的博客启用了Extendeded Task Manager,这对于跟踪有关流程的更多信息也非常有用。上面的Process Explorer也是+1,特别是对于杀死标准Task Manager不会结束的进程。
有一个工具FILEMON,它显示打开的文件和句柄。如果您实时观看它,则很难跟上其显示的步伐,它是如此之快。但是您可以阻止它实时显示,并且可以观看所有文件打开/写入活动。现在由Microsoft拥有,但最初由Sysinternals拥有