文件解锁
可用免费功能 · v0.3.0 起可从资源管理器直接拖入 · 打开应用默认就停在这一页
删除、移动、重命名时弹出「操作无法完成,因为文件已在另一个程序中打开」,Windows 不告诉你是哪个程序。把文件拖进 AgileMedic,它用系统自带的 Restart Manager 查出占用的进程,再由你选怎么处理。
它怎么查出是谁
Restart Manager 是 Windows 为「装更新不必重启」准备的系统组件,它知道哪些进程正持有哪些文件。AgileMedic 每次查询都新开一个会话,按三步走:
RmStartSession开一个会话。RmRegisterResources登记你放进来的路径。文件原样登记;文件夹展开成里面的全部文件(含隐藏和系统文件),最多 512 个,满了就停。RmGetList拿回占用进程的列表,再给每个进程补上可执行文件路径,并试一下能不能结束它。
全程只调系统接口,不装驱动,不碰与这些文件无关的进程。查询在主线程里做,文件夹很大时界面可能顿一下,512 的上限就是为这个设的。
它查的是进程,不是句柄
Restart Manager 回答的是「哪些进程占着」。AgileMedic 没有逐个枚举句柄的功能,也做不到「只关掉某个句柄、让进程接着跑」。下面第一档名叫「关闭句柄」,实际是请占用的程序退出。要句柄级排查,用 Sysinternals 的 Handle / Process Explorer。
把文件放进来
面板顶部是一块虚线拖放区,三种方式都行。放进来就自动查询,没有「开始」按钮。
| 方式 | 效果 |
|---|---|
| 拖入 | 从资源管理器把文件或文件夹拖到拖放区,松手即查 |
| 左键点拖放区 | 弹出「选择被占用的文件」,可以多选 |
| 右键点拖放区 | 弹出「选择被占用的文件夹」,一次选一个 |
- 一次最多 50 个:超出的部分截断,操作日志记一条 WARN「文件过多: 请求 N / 允许 50,已截断」。
- 新的一批替换旧的:再拖一次是重新开始,不是追加。
- 每个路径一块小标签:点上面的 × 移除这一项,剩下的路径会自动重新查一遍。
没有资源管理器右键菜单
目前不能在资源管理器里右键「用 AgileMedic 解锁」,也不能从命令行传路径进来。入口只有上面三种。
为什么拖放要靠一个叫 drophost 的小程序
AgileMedic 以管理员身份运行,而普通权限的资源管理器不能把文件拖进管理员窗口(Windows 的 UIPI 限制)。所以安装包里另带一个普通权限的 agilemedic-drophost.exe:它是一块透明的窗,正好压在拖放区上,替主程序接住拖放,再经命名管道 agilemedic-drop-v1 把路径传回去。
它由 explorer.exe 代为拉起,这样才不会继承管理员权限。主程序只接受同目录下这个 exe 发来的路径,单条消息上限 256 KB;主程序退出 6 秒后它自己也退出。
看懂占用进程表
查完后表格列出所有占用进程,默认全部勾选。表头写「占用进程 · 2 个 · 已选 2 个」,右侧「全选 / 取消」一键切换。
- 复选框:默认全选,只影响「结束进程(强制)」,见下一节。
- PID:Restart Manager 返回的进程号。
- 进程:程序的显示名;如果是服务,鼠标移上去能看到服务短名。
- 可执行文件:只显示文件名,完整路径在鼠标提示里;读不到时显示「—」。
- 权限:「需管理员」标橙,普通进程显示绿色「●」。
列表是空的?
说明现在没有进程占着这些文件,回资源管理器直接删、移即可。注意:路径不存在时也会显示为空。
三档处理办法
面板底部三个按钮从左到右越来越重。按钮旁的三格表是本站的「确认档」:点亮几格,就是动手前问你几次。
- 先点「关闭句柄(友好)」
程序自己保存退出;没反应的会被强制结束,所以有没存的文档先手动存一下。
- 只想结束其中几个:勾选后点「结束进程(强制)」
确认框里默认是「取消」,确定这些数据不要了再点「是」。
- 系统进程、驱动死死占住:「重启后删除」
排到下次开机删除,不可撤销。
一档 · 关闭句柄(友好)
调用 Restart Manager 的 RmShutdown:先给占用的程序发「请保存并退出」的消息,编辑器、Office 这类程序会先存再关。不响应的程序会被强制结束(调用时带了 RmForceShutdown 标志)。成功后还会试着用 RmRestart 把关掉的程序重新打开,打不开只记一条 WARN。
- 不弹确认:源码注释写着「友好档:不弹二次确认」。
- 作用于全部占用进程,不看勾选:按钮要求至少勾一个才能点,但关的是这次查到的所有进程。只想处理其中几个,用第二档。
二档 · 结束进程(强制)
对每个勾选的进程执行 OpenProcess + TerminateProcess,立即结束,不给它保存的机会。
- 弹出「强制结束进程」确认框:「将立即终止 N 个进程,未保存的数据将丢失」,默认焦点在「取消」,要你主动点「是」。
- 受保护进程(PPL)和部分系统关键进程即使以管理员身份也可能结束失败,日志会带 Win32 错误码。
三档 · 重启后删除
对每个路径调用 MoveFileExW 并带上 MOVEFILE_DELAY_UNTIL_REBOOT:把删除排到下次开机,那时还没有程序占着文件。
- 按路径执行,不看勾选;列表为空也能点。
- 弹出「重启后删除文件」确认框:「将在系统下次重启时删除 N 个文件,操作不可撤销」,默认焦点在「取消」。
- 放进来的是文件夹时,Windows 只会在重启时删掉空文件夹。
要不要管理员
AgileMedic 每次启动就请求管理员权限(弹一次 UAC),所以查询、结束、重启后删除都直接以管理员身份执行,中途不会再弹 UAC。「重启后删除」要写系统级的待删列表、结束受保护进程要管理员令牌,这是启动就要权限的原因之一。
旧版文档的说法已不适用
旧文档写「按需提权、失败请以管理员身份重启」,与 v0.3.0 的实际行为不符。应用里个别提示框还保留着这句话,可以忽略。
记录写在哪
面板底部的「操作日志」按时间追加每一步,按级别着色:INFO 蓝、WARN 橙、ERROR 红。「清空日志」只清界面,不删磁盘上的记录。落盘位置:
%APPDATA%\AgileMedic\AgileMedic\logs\operations.log
每行「ISO 时间 级别 消息」,UTF-8。路径里的 AgileMedic 出现两次,是组织名与应用名。
- 不能撤销:文件解锁的三档都没有撤销入口。
- 不进「操作记录」面板:可逐条撤销的 操作记录 只收服务、启动项、系统优化、环境变量等改动,解锁只写上面这个日志文件。
- 三个辅助按钮:「打开目标位置」「复制目标路径」「复制解锁报告」。报告是纯文本,含路径、每个进程的 PID / 名称 / 权限 / 勾选状态和当前日志,方便发给同事。
这页没有 AI
文件解锁的查询和三档处理都在本机完成,不发给任何模型,不配模型也完整可用,是免费功能。这个面板里也没有「AI 解释进程」:想问某个进程是什么,到 进程管理 里选中它点「AI 解释这个进程」(AI 功能,需先 配置模型,见 AI 诊断)。
如果你用 Claude、Cursor 经 MCP 接入,AI 可以调用 unlock_file 工具,效果等同第一档;执行前 AgileMedic 会弹窗请你点「允许」。