释放 Windows 文件共享锁

43
这个问题在我们工作中时常出现。我们的构建机器可以通过正常的Windows文件共享访问其文件。如果有人远程浏览了机器上的某个文件夹,并将窗口保持打开状态过夜,那么构建就会失败(就像现在这样)。保持打开状态的资源管理器窗口指向源代码树中的一个子文件夹。构建会在构建之前删除源代码并进行干净的检查,但是删除操作失败了。
现在,我想让构建正常工作。我正在家里登录,我不想重新启动构建机器。我无法联系到那个正在查看文件和文件夹的人,也无法远程重启他们的机器。
当Windows共享被锁定时,锁定进程是系统进程,所以我认为我不能像通常的锁定一样终止它。
是否有人知道释放共享文件夹锁定的方法,而不必重新启动计算机?

2
哇,这在Windows上真的没有办法防止吗?有点不太令人惊讶。至少Samba可以做到。 - rubenvb
6个回答

37

如果您是服务器上共享文件的管理员,您可以使用Windows内置功能:

  1. 开始 → 我的电脑 → 右键单击 → 管理,进入计算机管理控制台
  2. 在左侧导航中,导航到系统工具 → 共享文件夹
  3. 您可以在此查看共享、会话和打开的文件。这样可以帮助您找出是哪个工作站的哪个用户打开了哪些文件。
  4. 右键单击列表中的项目即可删除文件锁定。

希望这可以帮到您。


如果您关闭会话,它只会重新建立,并且肯定不会删除锁定。您尝试过您的建议吗? - Riegardt Steyn
这取决于情况。这对我也起作用了。冻结会话锁定了我的文件。 - Gideon Mulder
2
您也可以在运行提示符上使用 fsmgmt.msc 直接进入第三步。 - sudheeshix

24

找到了解决方案。

  1. 使用 Process Explorer 查找占用该目录的进程:

    1. 下载并提取 procexp.exe
    2. 在 Process Explorer 中从"查找"菜单中选择“查找句柄或DLL…”命令
    3. 输入出现问题的目录名称
    4. 显示匹配该名称的打开文件列表。猜测哪个无法删除,如果该文件被Windows共享锁定,持有该文件的进程将是System
    5. 记录下未关闭的目录
  2. 下载并安装 Unlocker (警告:链接已删除,因为它包含恶意软件)

    1. 安装Unlocker,禁用资源管理器扩展和其他垃圾选项
  3. 解锁目录

    1. 打开cmd窗口,并导航到C:\Program Files\Unlocker
    2. 在cmd窗口中运行Unlocker.exe "被锁定的文件夹的路径"
    3. 确认弹出对话框以释放锁定。使用解锁按钮解锁文件

现在,该目录应已解锁,可以被删除。


1
有点傻的问题:如果我和 OP 一样遇到了同样的问题,我应该在哪里运行程序?共享文件的计算机还是使用共享的计算机? - Salman A
@SalmanA:在存储文件的计算机上运行它(共享文件的计算机)。 - alldayremix
1
我建议删除Unlocker应用程序的链接。它现在包含间谍软件(请参见下文)。 - Charles Burns
3
这个回答确实需要被删除。Unlocker现在已经成为恶意软件的来源。 - DAG
下面是Charles Burns提供的更好的答案,使用“Process Hacker”。 - Michael

6
请尝试使用Process Hacker: https://wj32.org/processhacker/ Process Hacker类似于强化版的Process Explorer。
要查找有问题的进程,按下CTRL+F或单击"查找DLL句柄"按钮并搜索文件名。
一旦在查找句柄对话框中找到文件,您可以简单地右键单击该文件并选择"关闭"。(至少适用于v2.39.124)
旧版本在进程的上下文菜单中有一个"终止器"选项。 右键单击有问题的进程->杂项->终止器->选择终止技术。注意,有些可能是危险的并且可能会产生意外后果。

1
终结者在v2.39.124版本中不存在。但我仍可以右键点击文件句柄并选择“关闭”。 - Michael

2
我曾遇到类似问题,但我看到的上述建议都不适合自动化的夜间构建(正如原帖作者所暗示),因为它们都需要手动去寻找和终止锁定进程。
唯一我尝试过且似乎可靠的方法是先删除共享,然后进行构建,再添加共享。以下是自动删除共享的一种方法:
D:\Projects>net share Projects /DELETE /Y
用户正在使用Projects上的文件。继续操作将强制关闭这些文件。
Projects已成功删除。
(注意:如果您需要给共享添加混乱的特权组,则重新创建共享可能会很麻烦。)

2
我这样做的方式是同时使用OpenFiles.exeHandle.exe。你可以按任意顺序运行它们,就可以完全解锁资源了。
OpenFiles: 断开文件共享会话
Handle.exe: 释放任何打开的句柄(不要尝试关闭属于pid4的句柄,因为那是系统进程)
你可以通过使用PowerShell、批处理或任何你选择的语言来自动化此过程。

0

1
我正在尝试理解那个命令。它不只是重新启动/打开Windows上的“性能监视器”程序吗?我不明白它如何识别您要修复的特定文件。 - Gabriel Fair

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接