Skip to content

Repository files navigation

Windows 文件占用检测工具

解决删除文件/文件夹时提示 "文件夹正在使用" / "操作无法完成,因为其中的文件夹或文件已在另一程序中打开" 的问题。

功能特性

  • 精准检测:基于微软官方 Restart Manager API,无需管理员权限即可检测哪些进程正在占用目标文件/文件夹
  • 双重检测引擎:
    • Restart Manager API — 检测文件被哪个进程打开
    • 底层 PEB 进程工作目录枚举 — 通过 NtQueryInformationProcess + ReadProcessMemory 读取每个进程的真实当前工作目录(CWD),捕获"文件夹作为工作目录"的占用场景
  • 图形界面:直观展示占用进程的 PID、名称、类型、状态、可执行路径
  • 一键解决:
    • 结束占用进程(支持批量、结束进程树)
    • 结束进程并删除目标
    • 强制删除(多种删除方式自动尝试)
    • 重启后删除(针对顽固占用,注册系统重启时自动删除)
  • 进程定位:双击进程行即可在资源管理器中定位其可执行文件
  • 命令行模式:支持脚本化调用
  • 零依赖:仅使用 Python 标准库和 Windows 内置 API

系统要求

  • Windows 7 / 8 / 10 / 11
  • EXE 版本:无需安装 Python,直接运行
  • 源码版本:Python 3.8 或更高版本

使用方法

方式一:EXE 图形界面(推荐,无需 Python)

直接双击 文件占用检测工具.exe 即可打开图形界面。

需要管理员权限时(结束系统进程、重启后删除),请右键 文件占用检测工具.exe → 以管理员身份运行。

操作流程:

  1. 在顶部输入框中输入要检测的文件/文件夹路径,或点击"浏览文件/文件夹"选择
  2. 点击"检测占用"按钮
  3. 查看下方列表中的占用进程
  4. 根据需要选择操作:
    • 结束选中进程:仅结束进程,不删除文件
    • 结束进程并删除:结束进程后立即删除目标文件/文件夹
    • 打开进程位置:在资源管理器中定位进程的 exe 文件
    • 强制删除目标:不结束进程,直接尝试多种方式删除
    • 重启后删除:注册为系统重启时自动删除(需管理员权限)

方式二:EXE 命令行

# 仅检测
文件占用检测工具.exe "E:\test\locked.txt"

# 检测并结束所有占用进程
文件占用检测工具.exe -k "E:\test\folder"

# 检测、结束进程并删除
文件占用检测工具.exe -d "E:\test\folder"

# 查看帮助
文件占用检测工具.exe -h

方式三:源码运行(需 Python)

双击 启动.bat 启动图形界面,或命令行运行:

python file_lock_detector.py "E:\test\folder"
python file_lock_detector.py -d "E:\test\folder"

技术原理

Restart Manager API

Restart Manager 是 Windows Vista 引入的官方 API,用于安装程序在更新文件前检测并关闭占用文件的进程。本工具利用该 API 的 RmGetList 函数查询占用指定文件/文件夹的进程列表,具有以下优势:

  • 无需管理员权限即可完成检测
  • 微软官方支持,结果准确可靠
  • 能识别进程类型(普通应用、服务、资源管理器、控制台程序、关键系统进程)

底层进程工作目录枚举

当文件夹被某个进程作为**当前工作目录(CWD)**时,Restart Manager 可能无法检测到(甚至因权限问题返回错误码 5)。本工具通过以下步骤枚举每个进程的真实 CWD:

  1. CreateToolhelp32Snapshot 枚举所有进程
  2. OpenProcess 打开进程(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ)
  3. NtQueryInformationProcess 获取进程 PEB 基地址
  4. ReadProcessMemory 读取 PEB → ProcessParameters → CurrentDirectory(UNICODE_STRING)
  5. 匹配目标路径,精确定位以该文件夹为工作目录的进程

多级删除策略

删除时按以下顺序尝试:

  1. Python 标准库 os.remove / shutil.rmtree
  2. Windows 命令行 del /f /q / rmdir /s /q
  3. 注册 MoveFileEx(MOVEFILE_DELAY_UNTIL_REBOOT) 重启后删除

常见问题

Q: 检测不到占用进程但文件仍无法删除? A: 可能是内核级驱动或杀毒软件占用。尝试使用"重启后删除"功能,或进入安全模式删除。

Q: Restart Manager 返回错误码 5(访问被拒绝)? A: 这是正常现象——文件夹内可能有需要管理员权限的文件。此时工具会自动降级到底层 CWD 枚举,仍能检测到以该文件夹为工作目录的进程。如需完整检测,请以管理员身份运行。

Q: 结束进程时提示权限不足? A: 请以管理员身份运行。系统关键进程(如 lsass、csrss)无法被结束,这是 Windows 的保护机制。

Q: 资源管理器(explorer.exe)占用了文件夹? A: 这是最常见的情况——可能是某个资源管理器窗口正打开该文件夹,或预览窗格正在预览文件。结束 explorer.exe 后任务栏会暂时消失,可通过任务管理器(Ctrl+Shift+Esc)→ 文件 → 运行新任务 → 输入 explorer 恢复。

Q: 可以检测网络驱动器(NAS/共享文件夹)的占用吗? A: Restart Manager 仅支持本地文件系统。网络驱动器的占用由远端系统管理,无法通过本工具检测。

文件清单

文件 说明
文件占用检测工具.exe 可执行程序(单文件,无需 Python,推荐使用)
file_lock_detector.py 源代码(核心逻辑 + GUI + CLI)
启动.bat 源码模式普通启动脚本
管理员启动.bat 源码模式管理员启动脚本(自动请求 UAC 提升)
README.md 本说明文件

许可证

本工具仅使用 Python 标准库和 Windows 内置 API,可自由使用和修改。

About

解决删除文件夹显示文件占用的问题,导入文件夹位置,检测出进程占用,一键结束对应占用删除文件,相对于火绒强制删除让用户能看到被占用的文件避免误删

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages