Skip to content

Releases: matou1118/DevCleaner

v0.2.0 · 清理预览 / 7 天回滚 / 软件卸载

Choose a tag to compare

@matou1118 matou1118 released this 29 Sep 05:45

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

Choose a tag to compare

@matou1118 matou1118 released this 28 Sep 18:09

首个公开版本。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 等。

完整说明见 README / CHANGELOG。