fix: preserve config across Velopack updates

This commit is contained in:
chen qiang
2026-08-26 09:08:47 +08:00
parent a1a0f58ae1
commit 6cc8e782b9
8 changed files with 137 additions and 21 deletions
+13 -10
View File
@@ -75,7 +75,7 @@ cd .\henlo_migration_wpf10
- `.csproj` 只复制 `pre/*.txt|*.fnc|*.prc` 等程序辅助脚本,不复制本机 `config.ini` 或 `data/from/*.txt`;`pack.bat` 还会在打包前再次删除 `publish/config.ini`,并创建空的 `data/from/` 目录。
- `pre/hmig_get_table_bos_31.prc`、`pre/hmig_get_table_bos_field_31.prc` 等运行时辅助过程必须出现在发布输出中。
- 新安装的索引列表为空;程序添加第一条对应配置时会在 `data/from/` 创建 `table.txt`、`bos.txt`、`bos_field.txt`、`prc.txt` 或 `data.txt`。
- 新安装首次运行时会创建值为空的 `config.ini`,由用户在界面配置;不得把真实或样例账号密码放入发布产物。
- 新安装首次运行时会在 Velopack 根目录(与 `Update.exe` 同级)创建值为空的 `config.ini`;普通未打包运行时仍在程序目录创建。不得把真实或样例账号密码放入发布产物。
## Velopack 产物
@@ -115,16 +115,18 @@ http://zjhenlo.henlo.net:8878/henlo_migration/auto_update/
`App.xaml.cs` 当前行为:
1. UI 启动前调用 `VelopackApp.Build().Run()`。
2. 从系统临时目录恢复上次更新前备份的 `config.ini`、`data/`、`pre/`。
3. 创建指向更新服务器的 `UpdateManager`;非 Velopack 环境创建失败时禁用自动更新。
4. 后台静默检查并下载更新;手动“检查更新”使用相同更新源。
5. 用户同意立即重启时,先备份 `config.ini`、`data/`、`pre/`,再调用 `ApplyUpdatesAndRestart()`。
6. 新版本首次启动时恢复备份并删除临时备份目录。
1. UI 启动前注册 `OnAfterUpdateFastCallback` 并调用 `VelopackApp.Build().Run()`。
2. 从旧版更新时,更新器替换 `current/` 后会先调用新程序的快速回调;此时旧 `current/` 仍保存在 `packages/VelopackTemp/tmp_*`,程序从中把旧 `config.ini` 迁移到 Velopack 根目录。
3. 从系统临时目录恢复上次更新前备份的 `config.ini`、`data/`、`pre/`。
4. 创建指向更新服务器的 `UpdateManager`;非 Velopack 环境创建失败时禁用自动更新。
5. 后台静默检查并下载更新;手动“检查更新”使用相同更新源。
6. 用户同意立即重启时,先备份持久目录中的 `config.ini` 以及 `current/` 下的 `data/`、`pre/`,再调用 `ApplyUpdatesAndRestart()`。
7. 新版本首次启动时恢复备份并删除临时备份目录。
当前限制和未验证项:
- 更新备份范围包含 `config.ini`、`data/` 和 `pre/`;恢复失败时会记录到 `error.log`,发版验收仍需验证用户配置未丢失。
- `config.ini` 必须位于 Velopack 根目录,不能重新放回会被整体替换的 `current/`。旧版本首次升级依赖 `OnAfterUpdateFastCallback` 在更新器清理旧目录前完成迁移;迁移异常记录到根目录的 `config_migration.log`。
- 更新备份范围包含持久目录中的 `config.ini` 以及 `current/` 中的 `data/`、`pre/`;恢复失败时会记录到 `error.log`,发版验收仍需验证用户配置未丢失。
- 用户下载完成后选择“不立即重启”时,代码没有明确实现下次启动自动应用已下载更新的流程。
- 直接运行普通 `publish/` 中的 EXE 时通常不属于 Velopack 安装态,程序会禁用更新或把检查异常写入 `error.log`。
- `--noInst` 生成的是便携模式;便携包的检查、下载、应用和重启更新链路尚未完成实际端到端回归,不能声称自动更新可靠可用。
@@ -138,5 +140,6 @@ http://zjhenlo.henlo.net:8878/henlo_migration/auto_update/
5. 检查便携 ZIP、full/delta 包、`RELEASES` 和两个 JSON 的版本、大小及时间。
6. 检查发布包中的 `pre/` 和必要运行文件,并确认产物中不存在 `config.ini` 及开发机 `data/from/*.txt`。
7. 在未安装态测试普通 EXE/便携包启动;若任务涉及自动更新,再在对应 Velopack 运行形态下单独验证更新。
8. 只有获得上传授权后才能部署服务器;上传后验证 URL 和包完整性。
9. 交付说明必须区分:构建验证、打包验证、便携运行验证、自动更新验证和服务器部署验证。
8. 使用旧版便携目录写入不含真实凭据的标记配置,应用新版 full 包,确认标记配置已从旧 `current/config.ini` 迁移为根目录 `config.ini`,且新版再次启动不会覆盖。
9. 只有获得上传授权后才能部署服务器;上传后验证 URL 和包完整性。
10. 交付说明必须区分:构建验证、打包验证、便携运行验证、自动更新验证和服务器部署验证。