自从推出 Windows 7 以来,我们就遇到了锁定文件的奇怪问题。
我们在服务器上存储了一个 VB6 程序。客户端从共享中打开该程序,并整天使用它。当我们有更新时,我们只需重命名文件并复制新文件即可。在 NT、W2K 和 XP 中,这种方法已经为我们工作了 10 多年。自从推出 Win 7 以来,这种方法不再有效。
如果我打开服务器上的计算机管理并查看打开的文件,它们都处于“打开模式”读取。如果我使用 Hyena,它看起来有点不同。XP 客户端处于“打开模式”执行,而 Win 7 客户端处于“打开模式”读取。如果我尝试重命名文件,我会收到共享违规:
Desired Access: Read Attributes, Delete, Synchronize
Disposition: Open
Options: Complete If Oplocked, Open Reparse Point
Attributes: n/a
ShareMode: Read, Write, Delete
AllocationSize: n/a
Impersonating: xxx\yyyyyy
如果我终止 Win 7 连接,保留 XP 连接,我就可以重命名该文件。
这是服务器端:Windows Server 2003 R2 x64 共享权限为读/写 NTFS 权限为列出/读取/执行
任何帮助将不胜感激。
谢谢。
答案1
这是 Windows 7/2008 R2 中重定向驱动程序缓冲子系统的已知问题:
如果应用程序正在由一个或多个用户运行,则无法重命名 Windows 7 或 Windows Server 2008 R2 中共享文件夹中的应用程序
http://support.microsoft.com/kb/2622136
“考虑以下场景:
一个或多个用户正在运行共享文件夹中的应用程序。
注意:应用程序在运行时会打开指向自身的句柄。您尝试在运行 Windows 7 或 Windows Server 2008 R2 的计算机上重命名该应用程序。
“在这种情况下,您无法重命名该应用程序。此外,您还会收到以下错误消息:
该文件正在被另一个进程使用。
笔记
- 所有用户关闭应用程序后,您仍可成功执行相同的操作。
- 在运行 Windows XP 的计算机上不会发生此问题。
“出现此问题的原因是重定向驱动器缓冲子系统 (Rdbss.sys) 对新 oplock 的使用以及处理对远程可执行文件的引用的方式进行了更改。”
如果您更喜欢 rdbss.sys 的较新版本,可以在此修补程序中获取: