首页
社区
课程
招聘
7
Re0: 从零实现一个解除文件占用的小工具
发表于: 2023-9-18 10:56 15084

Re0: 从零实现一个解除文件占用的小工具

2023-9-18 10:56
15084

前言

相信大家或多或少都遇到过想删除一个文件,却提示被占用的情况:

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

一些可以使用的工具

在正式编码之前,这里先介绍一些已有的工具,如果想看编码实现,可以跳过本节。

火绒等杀毒软件

这里以火绒自带的工具为例,使用方式如下所示:

通过火绒自带的工具,可以看到文件被什么程序占用了,然后进行解锁。

专用工具

UnlockerLockHunterIObit Unlocker,由于未实际使用过,这里不再展开介绍。

任务管理器

通过Windows 自带的任务管理器也可以查询文件的占用状态,缺点是无法只解锁文件,只能关闭占用的进程。

Sysinternals 下的 handle

Sysinternals 是 Windows 平台上使用的一个工具集合,可以监控系统的绝大部分文件,磁盘,网络,进程线程,模块,工具全集可以在微软官网进行下载,这里只讲解用于句柄操作的 Handle:

首先在官网进行下载,可以发现包含的文件很简单,exe 文件可以直接运行:

在这里我们选择其中的 handle64 即可,首先以管理员身份运行终端,然后运行以下命令:

handle64 "C:\Users\xxx\Desktop\demo.gif"

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

handle64 -nobanner -c 1CE8 -y -p 20392

自己编码实现

以上讲解了一些解除文件占用的第三方功能,下面则开始步入正题,从零实现一个解除文件占用的小工具。

软硬件运行环境及工具

  • Windows11

  • Visual Studio 2022

  • Qt5.15.2/QML(用于展示简单结果文本,不了解 Qt 也没什么影响)

  • Inno Setup(用于创建程序的安装程序)

编码实现

首先说明以下程序的整体思路:程序初始判断是否有传参,如果无参说明程序是手动运行,执行添加注册表实现右键菜单包含解锁文件选项的逻辑。如果包含参数,说明程序是通过右键菜单运行的,根据传递的参数(即文件路径)执行相应的文件解锁操作。

以下不展示全部代码,完整代码可在前言中的GitHub查看,全部逻辑都在 main.cpp 中。

注册表功能实现


[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!

最后于 2023-9-18 11:07 被庄周の蝴蝶编辑 ,原因: 格式调整
收藏
免费 7
支持
分享
赞赏记录
参与人
雪币
留言
时间
mb_cmrbhvhv
谢谢你的细致分析,受益匪浅!
2025-1-4 21:44
yp太阳神
为你点赞~
2024-2-28 16:24
vay
为你点赞~
2023-9-22 15:31
AMBER_寒
为你点赞~
2023-9-22 11:10
青眼白龙
为你点赞~
2023-9-19 19:36
MaYil
为你点赞~
2023-9-18 11:57
庄周の蝴蝶
为你点赞~
2023-9-18 11:05
打赏 + 5.00雪花
打赏次数 1 雪花 + 5.00
收起 
赞赏  orz1ruo   +5.00 2023/09/22 感谢分享~
最新回复 (4)
雪    币: 4631
活跃值: (5391)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
挺详细,给作者点赞
2023-9-19 19:36
1
雪    币: 4064
活跃值: (31456)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢分享
2023-9-19 20:33
2
雪    币: 5358
活跃值: (4374)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
挺详细,给作者点赞
2023-9-28 23:26
1
雪    币: 3583
活跃值: (4388)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
感谢分享
2023-9-28 23:40
1
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册