Repository navigation
Releases: matou1118/DevCleaner
Release list
v0.2.0 · 清理预览 / 7 天回滚 / 软件卸载
v0.2.0 — 清理预览、7 天回滚、软件卸载
官网:https://matou1118.github.io/DevCleaner/
0.2.0 是这个项目第一次做删除语义的改动,请先看下面「这次改了什么」。
⚠️ 这次改了什么:文件不再进回收站
v0.1.0 把文件交给 SHFileOperation + FOF_ALLOWUNDO,也就是进 Windows 回收站。
0.2.0 改成移入本地备份目录 %LOCALAPPDATA%\DevCleaner\file_backups\<会话>\:
| v0.1.0 | v0.2.0 | |
|---|---|---|
| 文件删除去向 | Windows 回收站 | 本地备份目录 |
| 恢复方式 | 自己去回收站翻 | 界面里选会话一键回滚 |
| 有效期 | 直到你清空回收站 | 7 天,过期备份启动时自动清除 |
换来的是可审计、可按会话整批回滚、原路径已有文件时不覆盖。
代价是过了 7 天就只能靠系统还原点或文件恢复工具 —— 这一点比回收站弱,
所以界面上、README、站点上都写明了,没有藏着。
app.py 里 safe_delete 保留了无备份时的回收站降级路径(BACKEDUP: 前缀
用来区分实际走了哪条路)。
新增 · 安全
清理预览:确认弹窗在文件列表之前先给分类汇总(条目数 + 空间)和风险分解
(安全 / 需确认),先看清要删什么再决定。批量项逐条列出前 40 项。
系统目录防护:to_recycle_bin 纵深防御,拒删 %SystemRoot%、
%ProgramFiles%、%ProgramFiles(x86)% 下的任何文件。路径取自环境变量而不是
写死 C: —— Windows 装在 D 盘时写死 C 等于没有防护。
新增 · 卸载
软件卸载:读已安装软件列表(带厂商、版本、大小、上次使用、闲置天数),
运行软件自带的卸载程序,结束后自动扫描残留 —— 两个 SOFTWARE 分支、
InstallLocation、%APPDATA%、%LOCALAPPDATA%、Start Menu / 桌面快捷方式,
可一键清理。文件类残留走备份 + 回滚;注册表残留只列出,不自动删。
审计日志:每次清理写 %LOCALAPPDATA%/DevCleaner/clean_history.log,
底栏「历史」按钮查看最近 200 行。
修复
- MSI 制软件全都卸载不了。注册表
UninstallString有一大半是
MsiExec.exe /X{GUID}这种裸 exe 名,而os.path.exists("MsiExec.exe")
恒为False,它们全被误报成「卸载程序不存在」。改为先按PATH解析一次。 -c分类过滤器缺陷:旁路分类(注册表 / Git / npm)现在能正确选中,
且不泄漏其他分类的条目。- 英文模式输出中英混排。
T()是子串替换,0.2.0 新增文案漏收进翻译表,
曾输出过Deleteditems已备份,可通过Rollback恢复。补齐词条,并新增一条
自检:英文模式下T()的输出里不许残留中文。 - 界面文案与实际行为对齐:0.2.0 起文件不走回收站,而副标题和主按钮仍写着
「移入回收站」—— 主按钮是用户判断会发生什么的唯一依据。
验证
76 项自检,CI 在 Python 3.10–3.13 上跑,含真跑 ffmpeg/reg 往返、系统目录
防护(用环境变量指向临时目录做回归)、备份→回滚→校验一致、站点与 WCAG 对比度。
许可
CC BY-NC 4.0 —— 署名 Matou1118,禁商用,可二次开发。
v0.1.0 — 首个公开版本 / First public release
首个公开版本。Windows 本地清理工具,原生 PySide6 单文件 exe,离线可用,不依赖浏览器 / Node / Java。
10 类扫描(本机实测可回收 2.22 GB)
| 分类 | 判据 | 实测 |
|---|---|---|
| 已安装软件的安装包 | 剥版本/平台/角色后缀得产品名,再用进程名 + 安装目录 + 卸载注册表三重证据确认「已装」 | 6 项 / 1.51 GB |
| 传统垃圾文件 | 缩略图、跳转列表、浏览器缓存、着色器缓存、崩溃转储、Windows 更新缓存 | 5 项 / 51.6 MB |
| 过期临时文件 | 超过 N 天未动;目录里有 exe 在跑则标为需确认 | 0 项 |
| GitHub 残留 | gh CLI / GitHub Desktop / Copilot 缓存;无远程的本地 clone | 0 项 |
| AI Agent / Skill 缓存 | 不在 opencode.jsonc 的 plugin 列表里的包;X 与 X@latest 并存时的旧版本 |
1 项 / 79.6 MB |
| 更新器残留 | *@*-updater\pending\*、*\updates\executors\* |
1 项 / 87.2 MB |
| 构建产物 / 开发垃圾 | *.spec 同级的 build/;__pycache__、.pytest_cache 等 |
6 项 / 248 MB |
| Python 环境与缓存 | .venv(需有 pyvenv.cfg)、pip 缓存、配置里追加的任何目录 |
5 项 / 182 MB |
| 注册表 | 卸载命令指向不存在 exe 的卸载项与启动项;可安全重置的 MRU 键 | 1 项 / 466 项 |
| 空文件 / 空目录 / 断链 | 0 字节项,自动跳过 .gitkeep / *.lock / desktop.ini / Thumbs.db |
1 项 / 4369 项 |
安全设计
- 文件删除走
SHFileOperationW+FOF_ALLOWUNDO→ 进回收站,可还原 - 注册表先写
.reg备份,导出成功才删;导出失败拒绝删除 - 断链用
os.rmdir/os.unlink只删链接本身 - 扫描前检查占用,被进程占用的跳过
- 「需确认」项不自动勾选
- 有 remote 的 Git 仓库绝不进可删列表
- 失效程序只认「卸载命令里的 exe 不存在」
界面
- 原生窗口,无浏览器 / 无 WebView / 无控制台
- 打开即自动扫描;分类默认全折叠,10 个分类一屏放得下
- 6 套配色主题,实时切换并写回配置
- 注册表/空文件类按条目数显示,不拿字节数糊弄人
已知限制
- 删
HKLM下的键需要管理员权限 - 界面文案硬编码中文(英文文档齐全,界面 i18n 尚未做)
- 注册表清理基本不省空间(本机全部加起来 15 KB)—— 价值是清死引用
- 空文件扫描要全量遍历,约占一半扫描时间
验证
38 项自检,python test_app.py。CI 在 Python 3.10~3.13 上跑,含注册表完整往返(建键→备份→删除→reg import 还原→校验一致)、批量空文件真删且 .gitkeep 不被误删、主色与设计稿逐字一致、7 组对比度达 WCAG AA 等。