首先,很抱歉这个问题很长,但我想提供足够的细节。
概要:
在 Windows 中似乎无法强制关闭通过网络共享打开的文件句柄。因此,无法移动/重命名/删除通过网络共享打开的文件。我正在使用Win 7。
问题:
任何人都可以看到我做错了什么,或者有人可以确认这是预期的,并且无法强制关闭系统文件句柄(始终在 pid 4 上,例如与对文件的网络共享访问相关的那些句柄)。
背景:
我们有访问日志文件的远程网络客户端用户。我们需要滚动日志文件,使其不会变得太大。我们无法滚动日志文件,因为该文件被报告为正在使用。
重新创建问题:
0)
以管理员身份执行所有操作
1)
创建一个新目录并共享它
2)
在新目录中创建一个文件
3)
通过文件共享编辑文件,该文件往往会像 MS Word 那样获得文件锁定。所以开始/运行然后输入 \YourHostName 然后选择您创建的文件共享,然后导航到文件并使用 Word 编辑它。这是为了模拟远程用户/主机锁定文件。
4)
列出打开的文件句柄,我们可以看到下面的2
C:>句柄 C:\Log\MyLockedFile.txt
Handle v3.46 版权所有 (C) 1997-2011 Mark Russinovich Sysinternals - www.sysinternals.com
系统 pid:4 类型:文件 3E64:C:\Log\MyLockedFile.txt 系统 pid:4 类型:文件 5E48:C:\Log\MyLockedFile.txt
5)
尝试关闭文件句柄,这里我们看到尝试关闭失败。
C:>句柄-c 3E64 -p 4
Handle v3.46 版权所有 (C) 1997-2011 Mark Russinovich Sysinternals - www.sysinternals.com
3E64: 文件 (R--) C:\Log\MyLockedFile.txt 在系统 (PID 4) 中关闭句柄 3E64?(y/n) y 关闭句柄时出错:句柄无效。
6)
列出网络文件句柄,这里我们看到打开的网络共享文件。
C:>打开文件/查询-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
Handle 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 个文件已移动。