Windows - 无法强制关闭网络文件句柄 - 无法关闭系统(Pid 4)文件句柄

Mat*_*ttG 6 windows

首先,对于长期问题感到抱歉,但我想提供足够的细节.

概要:

在Windows中似乎不可能强制关闭通过网络共享打开的文件句柄.因此,无法移动/重命名/删除通过网络共享打开的文件.我正在使用Win 7.

题:

任何人都可以看到我做错了或者有人确认这是预期的,并且不可能强制关闭系统文件句柄(总是在pid 4上,例如与网络共享访问文件相关的那些).

背景:

我们有访问日志文件的远程网络客户端用户.我们需要滚动日志文件,使其不会变得太大.我们无法滚动日志文件,因为文件报告为正在使用中.

重新创建问题:

0)

以管理员身份做一切

1)

创建一个新目录并分享

2)

在新目录中创建一个文件

3)

通过文件共享编辑文件,其中包含一些像MS Word一样的文件锁定文件.所以,开始/运行然后键入\ YourHostName然后选择您创建的文件共享,然后导航到该文件并使用Word进行编辑.这是为了模拟锁定文件的远程用户/主机.

4)

列出打开的文件句柄,我们可以在下面看到2

C:>处理C:\ Log\MyLockedFile.txt

句柄v3.46版权所有(C)1997-2011 Mark Russinovich Sysinternals - www.sysinternals.com

System pid:4 type:File 3E64:C:\ Log\MyLockedFile.txt System pid:4 type:File 5E48:C:\ Log\MyLockedFile.txt

5)

尝试关闭文件句柄,在这里我们看到尝试关闭失败.

C:>处理-c 3E64 -p 4

句柄v3.46版权所有(C)1997-2011 Mark Russinovich Sysinternals - www.sysinternals.com

3E64:文件(R--)C:\ Log\MyLockedFile.txt关闭系统中的句柄3E64(PID 4)?(y/n)y关闭句柄时出错:句柄无效.

6)

列出网络文件句柄,这里我们看到打开的网络共享到文件.

C:> openfiles/query -v

信息:需要启用系统全局标志"维护对象列表"才能查看本地打开的文件.见Openfiles /?欲获得更多信息.

通过本地共享点远程打开的文件:

按类型访问的主机名ID #Locks打开模式打开文件(路径\可执行文件)14693W7N 67109233 myuser1 Windows 0写入+读取C:\ Log\MyLockedFile.txt 14693W7N 495 myuser1 Windows 0读取C:\ Log \

7)

关闭/断开文件的文件句柄,这里似乎工作

C:> openfiles/disconnect/a*/OP C:\ Log\MyLockedFile.txt

成功:已打开与打开文件"C:\ Log\MyLockedFile.txt"的连接.

8)

即使在尝试删除系统文件句柄后,它仍处于活动状态.

C:>处理C:\ Log\MyLockedFile.txt

句柄v3.46版权所有(C)1997-2011 Mark Russinovich Sysinternals - www.sysinternals.com

系统pid:4类型:文件3E64:C:\ Log\MyLockedFile.txt

9)

该文件仍在使用中,因此无法移动/重命名该文件

C:> move C:\ Log\MyLockedFile.txt C:\ Log\MyLockedFile.txt.newName进程无法访问该文件,因为它正由另一个进程使用.已移动0个文件.

hel*_*rth 4

只是发布作为答案,因为看到这个问题悬而未决(嘿,碰巧,整整一年?)

首先,这里有一个关于这个主题的非常有趣的讨论(我想是关于 NTFS)。如果您阅读上面的链接,您可以获得关于为什么某些句柄似乎永远“挂起”打开以及为什么“强制关闭”不是一个好主意的很好的提示。

“handle -c”给出无效句柄错误的原因可能与本地和远程运行“handle”有关,即在网络驱动器物理连接的计算机上(?)

出于我自己的目的,在我自己的场景中,我最终强制远程关闭一个句柄(只是因为我想以一种快速而肮脏的方式关闭它 - 使用您提到的 Sysinternals 工具,即“psexec”和“handle”(不需要指定用户和密码,因为我猜我是以管理员角色登录的):

rem To list the open handles
psexec \\someserver -c handle /accepteula some_filename

rem To force close a particular handle
psexec \\someserver -c handle /accepteula -c 3F9C -p 4
Run Code Online (Sandbox Code Playgroud)

但是,当再次远程运行句柄命令时没有给出任何结果(没有打开的句柄),我试图删除的文件夹仍然被锁定。一段时间后(我还尝试使用“net use f: /delete”断开与相关网络共享的连接,但无济于事,因为它“正在被活动进程访问”) - 我发现我自己的本地计算机是仍然保留该目录的打开句柄 - 实际上我远程强制关闭的句柄来自我自己的机器。我使用 Process Explorer GUI 毫无问题地关闭了它们,这应该等于在命令提示符下使用“handle”。之后可以删除有问题的文件夹。