Windows - 无法强制关闭网络文件句柄 - 无法关闭系统(Pid 4)文件句柄

2024-01-14

首先,很抱歉问了这么长的问题,但我想提供足够的细节。

概要:

在 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 个文件。


只是作为答案发布,因为看到这个问题悬而未决(嘿,碰巧,整整一年?)

首先,关于这个话题有一个非常有趣的讨论here https://serverfault.com/questions/1966/how-do-you-find-what-process-is-holding-a-file-open-in-windows/15695#15695(我想是关于 NTFS 的)。如果您阅读上面的链接,您可以获得关于为什么某些句柄似乎永远“挂起”打开以及为什么“强制关闭”不是一个好主意的很好的提示。

“handle -c”给出无效句柄错误的原因可能与本地和远程运行“handle”有关,即在网络驱动器物理连接的计算机上(?)

出于我自己的目的,在我自己的场景中,我最终强制远程关闭一个句柄(只是因为我想以一种快速而肮脏的方式关闭它 - 使用您提到的 Sysinternals 工具,即“psexec”和“handle”(不需要指定用户和密码,因为我猜我是以管理员角色登录的):

rem To list the open handles
psexec \\someserver -c handle /accepteula some_filename

rem To force close a particular handle
psexec \\someserver -c handle /accepteula -c 3F9C -p 4

但是,当再次远程运行句柄命令时没有给出任何结果(没有打开的句柄),我试图删除的文件夹仍然被锁定。一段时间后(我还尝试使用“net use f: /delete”断开与相关网络共享的连接,但无济于事,因为它“正在被活动进程访问”) - 我发现我自己的本地计算机是仍然保留该目录的打开句柄 - 实际上我远程强制关闭的句柄来自我自己的机器。我使用 Process Explorer GUI 毫无问题地关闭了它们,这应该等于在命令提示符下使用“handle”。之后可以删除有问题的文件夹。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows - 无法强制关闭网络文件句柄 - 无法关闭系统(Pid 4)文件句柄 的相关文章

  • 如何获取subprocess.run启动的进程的pid并杀死它

    我使用的是 Windows 10 和 Python 3 7 我运行了以下命令 import subprocess exeFilePath C Users test test exe subprocess run exeFilePath 使用
  • 如何从系统属性获取Windows操作系统环境变量

    我遇到一个关于系统属性环境变量的奇怪问题 如你所知 我们可以打开Computer gt Property gt Advanced System Settings gt Advanced gt System Environment Varia
  • 对 .NET Windows 安装程序应用程序执行注册表搜索

    我有一个 NET winform 安装程序应用程序 在安装之前 我会进行注册表搜索以检查计算机上是否安装了 MS Access Runtime 搜索目标机器 搜索目标机器的属性 启动条件 启动条件的属性 但是我想避免对路径进行硬编码 例如
  • 最低 DirectX 9.0c 版本以及如何检查它

    我们基于 Windows C Ogre 的游戏即将完成 在我们公开发布之前 我们必须解决这个问题 如果未更新到最新的 Dx9 0c 版本 Ogre 在许多测试计算机上都会崩溃 所有这些计算机都已经安装了 9 0c 但这一定是旧操作系统预安装
  • shutdown.exe 参数带有破折号或斜杠?

    我使用的电话shutdown exe重新启动安装了不同版本 Windows 的计算机 对于 Windows XP 命令是 shutdown exe r f t 01 对于其他版本的 Windows 我使用 shutdown exe L R
  • 消失的系统托盘图标

    我正在使用 C 在 Visual Studio 2010 中创建系统托盘应用程序 当应用程序启动时 我创建线程和系统托盘图标 该图标显示 但是每当我将鼠标悬停在该图标上时 它就会消失 应用程序仍在运行 即使我单击按钮显示所有隐藏的图标 它也
  • 如何在 RTMP 流中嵌入 pic_timing SEI 挂钟时间码?

    我需要将我的桌面流式传输到 AWS MediaLive 服务 并且根据要求 我必须在流中包含挂钟时间码 AWS 支持人员善意地通知我 对于 h 264 编码流 我需要提供时间码作为 pic timing SEI 消息 我在 Windows
  • endl 不适用于 wstring (unicode)

    这是代码 std ofstream f file1 txt f lt lt 123 lt
  • 在VB.net中动态添加用户控件

    我在 Vb net Windows 应用程序 中制作了自定义 UserControl 如何将其动态添加到表单中 UserControl 本质上只是另一个类 它继承自 Control 因此您可以使用控件执行各种操作 但除此之外它只是一个类 因
  • 我可以在 Emacs 的 shell 模式下使用 PowerShell 吗?

    我可以在 emacs 的 shell 模式下使用 powershell 作为 shell 吗 How 请参阅 Jeffrey Snover 的博客文章在 Emacs 内运行的 PowerShell http blogs msdn com p
  • 在Python中设置Windows命令行终端标题

    我在 Windows 计算机上运行某个 Python 脚本的多个实例 每个实例都来自不同的目录并使用单独的 shell 窗口 不幸的是 Windows 为每个 shell 窗口提供了相同的名称
  • 无法在 cmd 中通过管道传递 cmdlet 对象

    我正在使用这个 powershell 命令来获取特定的用户配置文件 获取 WmiObject Class Win32 UserProfile Where Object LocalPath eq C Users Pela 但是当我通过调用 p
  • 虚拟USB设备的安装与仿真

    我已经读过创建虚拟USB设备 https stackoverflow com questions 5016363 creating a virtual usb device and 虚拟USB设备 https stackoverflow c
  • ReadProcessMemory 上出现错误 299

    尝试从游戏内存中读取实体名称 使用 ce 检查时指针 100 正确 读取 写入浮点 整数值没有问题 32 位进程 游戏也是如此 尝试在 x64 中编译代码 但没有帮助 GetLastError 返回 nr 299 错误 部分 复制 299
  • 在 Windows 上构建 Docker 映像:入口点脚本“没有这样的文件或目录”

    我在这上面浪费了两天时间 直到我终于解决了我的问题 所以我想我会分享 我将概述我在这里遇到的问题 然后概述答案中的解决方案 My Dockerfile看起来像这样 FROM php 7 2 fpm COPY custom docker ph
  • 使用批处理文件挂载 .iso 文件 win windows 8 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个游戏 已备份到 iso 文件 笔记本电脑中的磁盘驱动器很吵 并且希望从单个快捷方式运行它 而不必每次都挂载 iso 文件 我运行
  • 关闭表单而不退出应用程序

    我目前正在开发一个小项目 希望得到一些帮助 我有两个表单 第一个是登录窗口 第二个是主程序 我遇到的问题是当我关闭时form1 with this Close 它正在退出整个程序 我有一种感觉 我需要使用线程或类似的东西 但我找不到合适的资
  • 添加到 .NET 任务栏中的右键单击应用程序菜单

    大多数应用程序只有 恢复 移动 调整大小 最小化 最大化和关闭 但是MS SQL提供了额外的选项 帮助 自定义视图 按照这些思路 是否可以添加到任务栏中应用程序的右键单击菜单 注 我是not指通知区域中时钟旁边的图标 这是一个更简单的ans
  • 如何将 .bat 文件中的变量获取到 PowerShell 脚本中?

    我正在用 PowerShell 替换 bat 脚本的部分内容 批处理文件的配置是通过以下文件完成的set适当的环境变量 我正在寻找一种方法将这些变量值加载到 ps1脚本 无需修改 bat文件 因为它们也在其他地方使用 一个例子 bat看起来
  • 为什么 %processor_architecture% 总是返回 x86 而不是 AMD64

    我正在尝试检索环境变量来检测系统是32位还是64位 但在64位服务器上环境变量 processor architecture 正在返回x86代替AMD64 有人对此有任何线索吗 您可能获得了错误的环境变量 如果您的应用程序是在 64 位操作

随机推荐