-
-
Re0: 从零实现一个解除文件占用的小工具
-
发表于:
2023-9-18 10:56
15084
-
相信大家或多或少都遇到过想删除一个文件,却提示被占用的情况:

不知道各位都是如何处理的,反正我一直都是用的火绒。但是作为一名程序员,自己写一个小程序实现多有意思,是吧。况且为了一个小工具去安装一个杀毒软件,不是一个合格的程序员,你们说对不对。基于以上的原因,最终出现了这篇文章,效果如下,本文所对应的完整代码已上传到GitHub,可自行取用~~~

在正式编码之前,这里先介绍一些已有的工具,如果想看编码实现,可以跳过本节。
这里以火绒自带的工具为例,使用方式如下所示:


通过火绒自带的工具,可以看到文件被什么程序占用了,然后进行解锁。
Unlocker
、LockHunter
、IObit Unlocker
,由于未实际使用过,这里不再展开介绍。


通过Windows 自带的任务管理器也可以查询文件的占用状态,缺点是无法只解锁文件,只能关闭占用的进程。
Sysinternals 是 Windows 平台上使用的一个工具集合,可以监控系统的绝大部分文件,磁盘,网络,进程线程,模块,工具全集可以在微软官网进行下载,这里只讲解用于句柄操作的 Handle:
首先在官网进行下载,可以发现包含的文件很简单,exe 文件可以直接运行:

在这里我们选择其中的 handle64 即可,首先以管理员身份运行终端,然后运行以下命令:
handle64 "C:\Users\xxx\Desktop\demo.gif"

然后我们就可以看到上图所示的占用的程序进程号和对应的文件句柄,之后我们就可以运行以下命令去解除占用了,其中 1CE8 和 20392 分别是上述命令获取到的文件句柄和占用进程号:
handle64 -nobanner -c 1CE8 -y -p 20392

以上讲解了一些解除文件占用的第三方功能,下面则开始步入正题,从零实现一个解除文件占用的小工具。
首先说明以下程序的整体思路:程序初始判断是否有传参,如果无参说明程序是手动运行,执行添加注册表实现右键菜单包含解锁文件
选项的逻辑。如果包含参数,说明程序是通过右键菜单运行的,根据传递的参数(即文件路径)执行相应的文件解锁操作。
以下不展示全部代码,完整代码可在前言
中的GitHub查看,全部逻辑都在 main.cpp 中。
注册表功能实现
[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!
最后于 2023-9-18 11:07
被庄周の蝴蝶编辑
,原因: 格式调整