首先,很抱歉问了这么长的问题,但我想提供足够的细节。
概要:
在 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 马克·鲁西诺维奇
Sysinternals - www.sysinternals.com
系统 pid:4 类型:文件 3E64:C:\Log\MyLockedFile.txt
系统 pid:4 类型:文件 5E48:C:\Log\MyLockedFile.txt
5)
尝试关闭文件句柄,这里我们看到尝试关闭失败。
C:>句柄-c 3E64 -p 4
手柄 v3.46
版权所有 (C) 1997-2011 马克·鲁西诺维奇
Sysinternals - www.sysinternals.com
3E64:文件 (R--) C:\Log\MyLockedFile.txt
关闭系统中的句柄 3E64 (PID 4)? (是/否) 是
关闭句柄时出错:
句柄无效。
6)
列出网络文件句柄,在这里我们可以看到文件打开的网络共享。
C:>打开文件/查询-v
信息:系统全局标志“维护对象列表”需要
能够查看本地打开的文件。
请参阅打开文件/?了解更多信息。
通过本地共享点远程打开的文件:
按类型访问的主机名 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 马克·鲁西诺维奇
Sysinternals - www.sysinternals.com
系统 pid:4 类型:文件 3E64:C:\Log\MyLockedFile.txt
9)
该文件无法移动/重命名,因为它仍在使用中
C:>移动 C:\Log\MyLockedFile.txt C:\Log\MyLockedFile.txt.newName
该进程无法访问该文件,因为该文件正在被另一个进程使用。
移动了 0 个文件。