Initial import of WPF migration tool

This commit is contained in:
chen qiang
2026-08-25 16:23:14 +08:00
commit 227f92c45b
47 changed files with 5204 additions and 0 deletions
+99
View File
@@ -0,0 +1,99 @@
# 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.Official` 1.9.0
- 添加: `Velopack` 0.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 打包脚本,用法:
```batch
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
```csharp
// 初始化(必须在启动时调用)
VelopackApp.Build().Run();
// 检查更新
var mgr = new UpdateManager("https://.../updates");
var newVersion = await mgr.CheckForUpdatesAsync();
// 下载更新
await mgr.DownloadUpdatesAsync(newVersion);
// 应用并重启
mgr.ApplyUpdatesAndRestart(newVersion);
```
## 打包命令
```bash
# 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` 文件检查更新。
## 优势
1. **Rust 核心** → Updater 完全不需要 .NET Runtime
2. **Delta 更新** → 只下载变更文件
3. **自动回滚** → 更新失败自动恢复旧版本
4. **后台静默更新** → 下次启动时自动应用
5. **经过大规模验证** → osu!、STranslate 等大牌在用
## 待办
- [ ] 测试打包流程
- [ ] 配置服务器更新目录
- [ ] 测试完整更新流程
- [ ] 更新 CI/CD 脚本(如有)