返回博客
Project Log

CleanMyDesktop:一个桌面整理工具的开发记录

从文件迁移、安全备份、托盘后台到发布打包,记录这个 Windows 小工具的设计重点和踩坑修复。

目标

这个工具解决一个很具体的问题:桌面文件越堆越多,但又不想直接删除。CleanMyDesktop 的处理方式是“移动而不是清除”,把文件保存到时间戳备份目录里,让桌面变干净,也保留找回路径。

核心实现

迁移逻辑在 desktop_cleaner/core.py。程序会创建 CleanMyDesktopBackup_YYYY-MM-DD_HH-MM-SS 目录,然后移动桌面内容。为了安全,它跳过 desktop.inithumbs.db,遇到同名文件会自动追加序号,避免覆盖。

一个关键问题是备份目录可能也在桌面里。如果不处理,工具会把旧备份再次搬进新备份。解决办法是用路径包含判断跳过归档目录本身,避免递归嵌套。

后台与自启

界面用 Tkinter 编写,自动模式用 after() 安排下一次迁移,不需要额外服务。关闭窗口时应用会隐藏到系统托盘,用户可以从托盘恢复或真正退出。

开机自启通过当前用户的 Windows Run 注册表项实现。配置保存在 %USERPROFILE%\.cleanmydesktop\settings.json,同时兼容旧版 .desktopclean 配置,避免改名后丢设置。

踩坑修复

第一个 UI 问题是中文时间单位被截断,后来通过更稳定的控件宽度修复。第二个问题是“下一次迁移时间”太长时会溢出状态面板,v1.1.1 改成固定状态区域,长时间戳也能放得下。

项目还经历了一次从 DesktopClean 到 CleanMyDesktop 的命名迁移。这个改动牵涉启动器、备份目录前缀、发布包、README、设置路径和测试用例,不只是改一个标题。

验证与发布

测试覆盖迁移命名、同名文件、备份目录跳过、路径包含判断、文件夹大小统计等高风险点。发布前运行 python -m unittest discover -s testspython -m compileall desktop_cleaner tests scripts

发布脚本会复制源码、资源、启动器、README、Release Notes 和 LICENSE,清理缓存文件,再生成 CleanMyDesktop-版本号.zip。这样每次 release 的结构都可预测。

总结

CleanMyDesktop 的重点不是复杂功能,而是可靠边界:不覆盖、不误搬、不吞掉备份、能退出、能恢复、能发布。小工具做到这些,才适合真的放到自己的电脑上长期使用。