花笺1.1.0应用内更新揭秘:检查、下载、安装背后Windows四层保障机制全解析
2026/9/2 15:10:59 网站建设 项目流程

花笺1.1.0应用内更新揭秘:检查、下载、安装背后Windows四层保障机制全解析

【免费下载链接】floral-notepaper花笺,轻量优雅的跨平台桌面便签工具,支持 Markdown 编辑与预览项目地址: https://gitcode.com/gh_mirrors/fl/floral-notepaper

花笺(Floral Notepaper)是一款轻量优雅的跨平台桌面便签工具,支持 Markdown 编辑与预览。从 1.1.0 版本开始,它新增了应用内更新能力:在设置里一键检查、下载并安装更新,不用再手动去 Release 页面翻找安装包。更难得的是,Windows 端为这条更新链路准备了四层保障机制——安装回滚、注册表备份、进程校验和暂存目录保护,让"更新翻车"这件事有了兜底。本文带你完整看懂这套机制。

一、1.1.0 应用内更新带来了什么

在 1.1.0 之前,升级花笺要自己走一遍"打开 Release 页 → 找对应平台的安装包 → 下载 → 覆盖安装"的完整仪式。现在,这套流程被搬进了应用内部(详见 1.1.0 版本说明):

  • 双更新源:同时支持 GitHub Release 与 Mirror酱 两个版本信息源,可填写 Mirror酱 CDK 切换下载通道;
  • 自动 + 手动双模式:支持按设定频率自动检查更新,也可在"关于"面板手动触发;
  • 完整可控流程:检查、下载、安装、取消一个不少,下载过程中随时可取消;
  • 安装前自动保存:安装更新前,花笺会尝试自动保存所有未保存的笔记,多开的小窗便签一个都不会漏;
  • Windows 兜底:安装回滚、注册表备份、进程校验、暂存目录保护四重保障(下文详解)。

二、更新检查、下载与安装的完整流程

整个更新系统由 src-tauri/src/updater/mod.rs 统管,状态、日志、下载包都放在独立的updates目录里,分为downloadsstaginglogs三个子目录。

更新检查:两个源,一个偏好

检查逻辑在 src-tauri/src/updater/check.rs 中。你可以设置"Mirror酱优先"或"GitHub 优先",应用会按偏好顺序查询版本信息,拿到最新版号、下载链接和文件哈希。自动检查的频率(多少小时查一次)在设置里可调,相关界面代码位于 src/features/update/UpdateSettingsSection.tsx。

安全下载:大小 + SHA256 双重校验

下载模块 src-tauri/src/updater/download.rs 不只是把文件拉下来:

  • 下载中的任务可以随时取消(这是三种任务里唯一可取消的);
  • 校验文件大小SHA256 哈希是否和清单一致,防止下载到"半截"或被篡改的安装包;
  • 下载产物默认保留 3 天,过期自动清理,不会越积越多。

安装前还会再验一次哈希和大小(见 helper.rs 的 validate_request),双保险。

三、Windows 四层保障机制全解析

Windows 下的安装由一个独立的"更新助手"(update helper)进程执行,核心代码在 src-tauri/src/updater/helper.rs。为什么需要独立进程?因为 Windows 不能覆盖正在运行的floral-notepaper.exe。主程序把接力棒交给助手后自己退出,助手完成安装再拉新版本重启——整个过程有四道防线。

第一层:安装回滚,失败自动恢复旧版

动手装新版之前,助手会先把整个安装目录原样备份到回滚存储区(见 prepare_windows_rollback_plan)。之后无论哪一步出事——安装程序报错、目标文件没出现、版本对不上、新程序启动失败——都会触发 rollback_windows_update:把备份目录里的旧文件完整拷回去,让应用恢复到你更新前的样子。

这意味着"装到一半蓝屏/掉电"这类场景下,重开机器后你面对的仍是能用(虽然旧)的花笺,而不是一堆残缺文件。

第二层:注册表备份,卸载信息也回得去

Windows 的"设置 → 应用"里能列出花笺,靠的是注册表Uninstall键。如果只回滚文件不回滚注册表,新版写入的卸载信息就和旧版文件对不上了。

因此助手会用系统自带的reg export把匹配的卸载注册表项导出成 .reg 备份文件(backup_windows_registry_state);一旦回滚,再用reg import原样导回(restore_windows_registry_backup)。文件、注册信息,一起回到原点。

第三层:进程校验,确保"真的退干净、真的装上了"

这一层管两头:

  • 装之前:助手不会立刻写文件,而是先确认主进程确实退出了——先给 5 秒优雅缓冲,不够再发强制结束信号并等待(wait_for_process_exit),避免"程序没退干净,文件被占用写一半";
  • 装之后:用 Windows API 直接读取新安装可执行文件的内嵌版本信息,与目标版本号逐一比对(verify_windows_installed_version)。版本号对不上就判定失败并回滚——防止"安装程序说成功了,其实文件还是旧的"。

第四层:暂存目录保护,助手自己也"自带保险"

助手可执行文件不会直接运行主程序目录里的原件,而是先复制到staging暂存目录(stage_windows_helper_copy,连运行时依赖的 DLL 一起拷)。好处是:即使安装覆盖了主程序目录,正在干活的助手也不受影响。

此外还有两个配套设计:

  • 标记文件握手:助手用ready/done/relaunching标记文件向主程序汇报进度,任何时刻断电,重启后都能从标记推断出"进行到哪一步了";
  • 看门狗进程:主程序还会再启一个 Watchdog 模式助手盯着干活的助手(execute_watchdog)——万一助手卡死 30 分钟没交出完成标记,看门狗会把状态标记为失败并拉起旧版本,保证用户永远有东西可打开。

而每次启动时,staging里的旧暂存文件会被无条件清理(cleanup_staging_entries),暂存区不会残留"僵尸"文件。

四、小结:为什么这套更新值得信任

防线防什么
安装回滚安装失败 → 旧版文件完整恢复
注册表备份卸载信息错乱 →reg import原样还原
进程校验文件被占用 / 装完版本不符
暂存目录保护助手自身被覆盖 / 卡死无响应(看门狗兜底)

配合 SHA256 校验、双更新源和安装前自动保存笔记,1.1.0 的花笺把"更新"这件容易翻车的事,做成了一个环环相扣的闭环。官方也留了句话:链路较多,如遇到异常请保留现场并提交 Issue。

感兴趣的话,可以从 src-tauri/src/updater/ 目录读起:check.rs管检查、download.rs管下载、install.rshelper.rs管安装——四层保障的实现都摊开在这几个文件里,欢迎深挖 🌸。

【免费下载链接】floral-notepaper花笺,轻量优雅的跨平台桌面便签工具,支持 Markdown 编辑与预览项目地址: https://gitcode.com/gh_mirrors/fl/floral-notepaper

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询