FufuLauncher自动更新机制详解:版本检查与增量升级的完整实现路径
【免费下载链接】FufuLauncherA third-party launcher for Genshin Impact that supports game injection, automatic check-in, and some useful small features.项目地址: https://gitcode.com/gh_mirrors/fu/FufuLauncher
🚀 本文带你拆解原神第三方启动器FufuLauncher的自动更新机制:主程序如何在线对比版本号、内置更新器UpdateFufuLauncher.exe如何下载并校验安装包,以及双地址容灾、镜像加速与 SHA-256 双重校验是如何保障每一次增量升级安全可靠的。
自动更新整体流程:从启动到升级的 6 步
FufuLauncher 的更新体系由两部分组成:
| 组成 | 负责什么 | 所在位置 |
|---|---|---|
主程序UpdateService | 版本检查、更新提醒 | FufuLauncher/Services/UpdateService.cs |
| 独立更新器 | 下载、校验、安装 | UpdateFufuLauncher/MainWindow.xaml.cs |
流程可以概括为 6 步:连通性探测 → 拉取 Update.json → 版本比对 → 展示更新公告 → 分片下载 → 双重校验后安装。
版本检查:双地址容灾 + 本地去重
应用启动后,后台任务 CheckAndShowUpdateWindowAsync 会调用 UpdateService 执行检查,策略相当稳健:
- 连通性先行:先探测服务器是否可达,不可达直接跳过,不干扰正常使用;
- 双地址容灾:优先请求
UpdateJsonUrl,失败后自动切换备用地址,最多重试 3 次(见 GetWithRetryAsync,端点定义在 FufuLauncher/Constants/ApiEndpoints.cs); - 本地版本兜底:安装包内附带一份 Update.json,离线时更新器也能据此工作;
- 去重提醒:本地设置中记录已提醒过的版本号(
LastAnnouncedVersionKey),同一版本不会反复弹窗; - 静默降级:整个检查被 try/catch 包裹,任何异常都不会影响启动器正常运行。
预览版与开发版的精细区分
服务器配置同时携带PreReleaseVersion(预览版)与正式版两个字段。只有当预览版版本号同时高于正式版和当前版本、且"预览版更新提醒"开关开启时,才会弹出预览版提醒。若检测到开发版构建,主窗口还会额外显示开发版徽章。
点击更新后:从公告页到独立更新器
发现新版本后,应用弹出更新公告窗口 UpdateNotificationWindow,它会把服务器 HTML 公告解析成本地富文本展示,预览版公告还带有醒目的黄色横幅。点击"立即更新"后:
- 以管理员权限启动同目录下的
UpdateFufuLauncher.exe; - 传入
--installed-version、--use-third-party-cdn等参数,预览模式追加--preview(见 LaunchUpdaterAsync)。
独立更新器 UpdateFufuLauncher 启动后同样走"在线配置 → 本地 Update.json 兜底"的路径,再将当前版本号与服务器版本号比较,判断是否需要升级。它支持三种模式:正式版更新、预览版更新(按 GitHub 标签定位对应 Release 安装包)、以及从预览版回退正式版(--rollback)。
下载与校验:分片下载、镜像加速、双重验签
这是整个更新机制中最值得称道的部分:
- 镜像测速:并发探测数十个加速节点,下载一个已知 MD5 的测试文件做"防劫持"校验,再按响应时间排序供你挑选最优线路(见 TestMirrorsAsync);
- 分片并行下载:4 线程分片 + 近乎无限重试,界面实时显示进度与速度;内置"下载卡死检测",进度长期不动会主动提示更换节点(StuckTimer_Tick);
- SHA-256 完整性校验:下载完成先比对哈希,不匹配则自动删除文件并提示换节点(VerifyFileSha256);
- Authenticode 数字签名校验:正式版安装包还会验证发布者签名,未通过时弹出两轮安全警告,明确告知篡改风险(VerifyAuthenticodeSignature);
- 一键安装:全部通过后才以管理员权限启动安装程序,覆盖旧版本,完成这次"增量"升级。
常用入口与设置项
日常使用中,你可以在设置页的更新区域手动"检查更新"(入口实现见 FufuLauncher/ViewModels/SettingsViewModel.Updates.cs),并随时调整这些选项:
- 使用第三方 CDN 加速:控制更新器是否启用镜像线路;
- 预览版更新提醒:开启后可第一时间尝鲜预览版;
- 回退正式版:预览版出现问题时可一键退回稳定版。
写在最后
FufuLauncher 的自动更新机制麻雀虽小五脏俱全:版本检查有容灾、提醒有去重、下载有加速、安装前有双重安全防线。对于想了解桌面应用如何优雅实现自动更新的开发者而言,这套"主程序负责提醒、独立更新器负责落地"的分离式设计非常值得参考。
【免费下载链接】FufuLauncherA third-party launcher for Genshin Impact that supports game injection, automatic check-in, and some useful small features.项目地址: https://gitcode.com/gh_mirrors/fu/FufuLauncher
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考