2.6 KiB
2.6 KiB
Velopack 迁移总结
目标
将自动更新从 AutoUpdater.NET 迁移到 Velopack,解决 .NET 8 ZipExtractor 依赖问题。
根本原因
AutoUpdater.NET 1.9.0 内部嵌入了 ZipExtractor.exe(.NET 8 WinForms 程序),用户机器只有 .NET 10 时无法运行。
修改文件
1. henlo_migration_wpf10.csproj
- 移除:
Autoupdater.NET.Official1.9.0 - 添加:
Velopack0.0.1298
2. App.xaml.cs
- 移除所有 AutoUpdater 相关代码
- 添加 Velopack 初始化:
VelopackApp.Build().Run() - 添加
UpdateManager用于检查/下载/应用更新 - 后台静默检查更新
- 手动检查更新支持弹窗确认
3. Views/HomeWindow.xaml.cs
CheckUpdate_Click改为 async void,调用CheckUpdateManualAsync
4. pack.bat (新增)
Velopack 打包脚本,用法:
pack.bat 1.0.002
Velopack 工作流程
开发机:
dotnet publish → vpk pack → releases/
├── setup.exe (安装程序)
├── update.nupkg (更新包)
└── RELEASES (更新索引)
服务器:
上传 releases/ 到 http://zjhenlo.henlo.net:8878/henlo_migration/auto_update/
客户端:
启动 → VelopackApp.Build().Run()
→ UpdateManager.CheckForUpdatesAsync()
→ 有新版本 → DownloadUpdatesAsync()
→ 提示用户重启 → ApplyUpdatesAndRestart()
关键 API
// 初始化(必须在启动时调用)
VelopackApp.Build().Run();
// 检查更新
var mgr = new UpdateManager("https://.../updates");
var newVersion = await mgr.CheckForUpdatesAsync();
// 下载更新
await mgr.DownloadUpdatesAsync(newVersion);
// 应用并重启
mgr.ApplyUpdatesAndRestart(newVersion);
打包命令
# 1. 发布应用
dotnet publish -c Release -o ./publish --self-contained false -r win-x64
# 2. Velopack 打包
vpk pack -u "henlo_migration" -v "1.0.002" -p "./publish" -e "恒诺迁移工具.exe" -o "./releases"
服务器部署
将 releases/ 目录下的文件上传到:
http://zjhenlo.henlo.net:8878/henlo_migration/auto_update/
Velopack 会自动读取该目录下的 RELEASES 文件检查更新。
优势
- Rust 核心 → Updater 完全不需要 .NET Runtime
- Delta 更新 → 只下载变更文件
- 自动回滚 → 更新失败自动恢复旧版本
- 后台静默更新 → 下次启动时自动应用
- 经过大规模验证 → osu!、STranslate 等大牌在用
待办
- 测试打包流程
- 配置服务器更新目录
- 测试完整更新流程
- 更新 CI/CD 脚本(如有)