概要:
在Windows中,好像无法强制关闭通过网络共享打开的文件句柄。因此,在通过网络共享打开的文件不能被移动/重命名/删除。我使用的是Win7。
问题:
有人能看出我做错了什么吗?或者能否确认这是预期的行为,并且不能强制关闭系统文件句柄(始终在pid 4上,例如与文件的网络共享访问相关的那些)。
背景:
我们有远程网络客户端用户访问一个日志文件。我们需要滚动日志文件,以便它不会变得太大。由于该文件正在使用,我们无法滚动日志文件。
重现问题:
0)以管理员身份执行所有操作
1)创建新目录并共享它
2)在新目录中创建一个文件
3)通过文件共享使用类似MS Word的东西来编辑文件,这样做 tends 可以获得文件锁定。因此,要模拟远程用户/主机锁定文件,请执行 Start / Run,然后键入\ YourHostName,然后选择您创建的文件共享,然后导航到文件并使用Word编辑它。
4)列出打开的文件句柄,我们可以看到下面有2个
handle C:\Log\MyLockedFile.txt
Handle v3.46 Copyright(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)尝试关闭文件句柄,这里我们看到尝试关闭失败。
handle -c 3E64 -p 4
Handle v3.46 Copyright(C)1997-2011 Mark Russinovich Sysinternals - www.sysinternals.com
3E64:File(R--)C:\Log\MyLockedFile.txt 在系统中关闭句柄3E64(PID 4)?(是/否)y 错误关闭处理: 该句柄无效。
6)列出网络文件句柄,这里我们可以看到打开的网络共享到文件。
openfiles /query -v
INFO:需要启用系统全局标志“维护对象列表”才能查看本地已打开的文件。 有关更多信息,请参见Openfiles /?
主机名 ID 访问者 类型 #锁定数 打开模式 打开文件 (路径\可执行文件) 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
SUCCESS: 已终止与打开文件 "C:\Log\MyLockedFile.txt" 的连接。
8)
尝试删除后,系统文件句柄仍然处于活动状态。
C:>handle C:\Log\MyLockedFile.txt
Handle v3.46 Copyright (C) 1997-2011 Mark Russinovich Sysinternals - www.sysinternals.com
System pid: 4 type: File 3E64: C:\Log\MyLockedFile.txt
9)
由于文件仍在使用中,因此无法移动/重命名文件。
C:>move C:\Log\MyLockedFile.txt C:\Log\MyLockedFile.txt.newName The process cannot access the file because it is being used by another process. 0 file(s) moved.
NetFileClose
。 - Raymond Chen