cle*_*tus 588 windows file-sharing
关于 Windows,让我无休止地烦恼的一件事是旧的共享冲突错误。通常你无法确定是什么让它打开了。通常它只是一个指向相关目录的编辑器或资源管理器,但有时我不得不重新启动我的机器。
关于如何找到罪魁祸首的任何建议?
Edd*_*die 491
我在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"
Svi*_*ish 253
为此,您可以使用Windows 7、8 和 10内置的资源监视器。
找到句柄后,您可以通过查看图像和/或 PID 列来识别进程。
然后您可以尝试像往常一样关闭应用程序,或者,如果这不可能,只需右键单击句柄并直接从那里终止进程。十分简单!
复制自我的原始答案:https : //superuser.com/a/643312/62
Mar*_*wul 99
关闭手柄时要非常小心;由于句柄回收,它比您想象的更危险 - 如果您关闭文件句柄,并且程序打开其他东西,那么您关闭的原始文件句柄可能会重新用于“其他东西”。现在猜猜如果程序继续运行会发生什么,认为它正在处理文件(您关闭了它的句柄),而实际上该文件句柄现在指向其他东西。
请参阅Raymond Chen关于此主题的帖子
假设搜索索引服务有一个打开的文件进行索引,但暂时卡住了,并且您想删除该文件,因此您(不明智地)强行关闭了句柄。搜索索引服务为了记录一些信息而打开它的日志文件,将被删除文件的句柄作为日志文件的句柄回收。卡住的操作终于完成了,搜索索引服务终于开始关闭它已经打开的句柄,但最终却在不知不觉中关闭了日志文件句柄。
搜索索引服务打开另一个文件,比如一个用于写入的配置文件,以便它可以更新某些持久状态。日志文件的句柄作为配置文件的句柄被回收。搜索索引服务想要记录一些信息,因此它写入其日志文件。不幸的是,日志文件句柄被关闭并且句柄重新用于其配置文件。记录的信息进入配置文件,破坏它。
同时,您强制关闭的另一个句柄被重用为互斥句柄,用于帮助防止数据损坏。当原始文件句柄关闭时,互斥句柄也将关闭,防止数据损坏的保护将丢失。服务运行的时间越长,其索引的损坏程度就越大。最终,有人注意到索引返回了不正确的结果。当您尝试重新启动该服务时,它会失败,因为其配置文件已损坏。
您将问题报告给提供搜索索引服务的公司,他们确定索引已损坏,日志文件神秘地停止记录,并且配置文件被垃圾覆盖。一些可怜的技术人员被分配了一项无望的任务,即找出服务损坏其索引和配置文件的原因,而没有意识到损坏的根源是您强行关闭了句柄。
只是为了澄清,这更有可能是由于行为不端的第 3 方应用程序没有正确使用CreateFile API 调用而不是 Windows 本身中的任何内容。或许是CreateFile设计的结果,大功告成,回不去了。
基本上,在 Windows 程序中打开文件时,您可以选择指定允许共享访问的标志。如果您不指定标志,程序将独占访问该文件。
现在,如果资源管理器似乎是这里的罪魁祸首,那可能只是表面上的情况,真正的罪魁祸首是安装了一个 shell 扩展程序,该扩展程序出于自己的目的打开文件夹中的所有文件,但也是如此gung-ho 这样做,或者它本身没有正确清理。赛门铁克 AV 是我以前见过这样做的,如果其他 AV 程序也应该受到指责,我也不会感到惊讶。源代码控制插件也可能有问题。
所以不是真正的答案,而是一些建议,不要总是将可能编写得很糟糕的 3rd 方程序归咎于 Windows(这也可能发生在任何其他具有隐式文件锁定的操作系统上,但任何基于 Unix 的操作系统都具有共享访问权限)默认)。
小智 6
Apropos Explorer 将文件保持打开状态:“当您需要删除的文件发生这种情况时,您可以选择强制关闭句柄或重新启动。”
你可以结束资源管理器。
如果这是一次性的事情(资源管理器通常不会打开此文件),那么我猜想注销并重新登录就可以了。
否则,杀死桌面资源管理器进程并在它消失后做你想做的事情。首先启动 cmd.exe 的副本(您需要一个 UI 来执行您想要的清理工作)。确保没有非桌面资源管理器正在运行。然后使用例如任务管理器杀死最后一个资源管理器。在命令提示符中执行您想要的操作。最后,从命令提示符运行资源管理器,它将成为桌面。
如果某些系统托盘程序无法处理 shell 重新启动,我猜可能会有一些残留的不愉快。
文件可以被本地进程(unlocker是使用的工具)和通过共享进入的文件访问锁定。
Windows 中有一个内置功能,可以显示本地计算机上的哪些文件被远程计算机打开/锁定(通过文件共享打开文件):
* Select "Manage Computer" (Open "Computer Management")
* click "Shared Folders"
* choose "Open Files"
Run Code Online (Sandbox Code Playgroud)
在那里你甚至可以强行关闭文件。
归档时间: |
|
查看次数: |
771305 次 |
最近记录: |