软件名称
Delapp
应用平台
- Windows 7或更高
- .NET Framework 4.8 运行时或更高
推荐类型
【开发者自荐】
简介
- 高速删除文件和文件夹
- 删除以
.
或 - 删除被其他程序打开的文件和文件夹
- 删除映射文件
- 删除正在运行的程序
- 删除正被使用的动态运行库
项目网站&下载
https://github.com/differentrain/Delapp
截图
瞎扯八道
很久以前写过一个类似的东西 DeletionTool, 不过它有不少小毛病,于是找个时间重写了一下。
其实“解除文件占用”从技术方面讲很简单,像 BlackINT3 大佬的 OpenArk, 解锁占用只是其中最微不足道的功能之一。
这项技术最大难点在于Ring3层面的束手束脚。最典型的例子QueryObject,这玩意不进内核简直就是达利特,碰见pipe等大哥正在进行SYNCHRONIZE操作,直接挂起到老死,DeletionTool就有这个问题。
写Delapp的时候,我不想为了小工具单独写个驱动,还得安装,麻烦且不环保,于是试了很多办法,研究了一两天才解决。
大部分接解除用工具到这里就结束了,实测的时候,还有一些情况无法解决,比如被删除的是一个程序exe,或者是一个正被使用的dll。当然这也不难,遇到程序直接关闭进程,遇到dll或者映射文件直接unmap。
于是Delapp解除占用的流程是这样的:首先判断被占用的是不是程序,如果是程序就关闭,如果是其他模块(dll)或者映射文件,则unmap掉,最后才是像其他程序一样检测句柄问题。
这套流程可以做到至少70%的文件都是想删就删,不过肯定有风险,某些软件可能就闪退了,这个没办法,于是我强制加了个提示,必须确认才会删除。
不过它毕竟是用户层的应用,对系统是没影响的,大概。我曾经一度想做个提权,弄到System权限,能删的东西就更多,不过单文件就做不到了,于是作罢。
还有就是以.
或
(空格)结尾的文件夹。
打开命令行,输入 md test..\
,就可以创造一个名为test..
的文件夹,摁Delete或者邮件删不掉的,输入命令 rd test..\
才能删掉。我最开始遇见这个问题是下在本子的时候,特别糟心,可以说是我写这两个软件的最大动机了……
这个问题吧,是shell外壳程序的BUG导致的,这意味着系统通用的文件对话框完全不能用了,所以如上图,我做了个简陋的对话框,专门用来处理这种糟心货。
用起来肯定不如系统自带的那个方便,如果不是这种倒霉玩意儿,直接拖到软件上或者用右键菜单就可以了,要是遇上了,想删除或者修复的话,就用这对话框手动选择吧。
P·S:刚才发给朋友,被鄙视了,因为这程序不能删除自己……其实是能做到的,但要创建临时文件或者task了,不优雅。所以我把自身的路径,和所属文件夹路径都屏蔽了。