#92 已建立 Launcher.exe + app/ + data/ 发布结构和 autobuy——manifest.json,但 Client 仍需人工取得并替换更新包。需要在不阻塞界面、不覆盖本地数据、不保存更新凭据的前提下,实现用户主动检查、下载并在下次启动安全应用更新。
Launcher.exe + app/ + data/
autobuy——manifest.json
QObject + moveToThread
data/update/app.new
..
app/
Launcher.exe
app.old
client/src/update_service.py
client/src/update_ui_event.py
client/src/settings_ui.py
settings_ui_event.py
client/build_tools/launcher.py
docs/client/01-requirements.md
02-architecture.md
05-ui-specification.md
06-quality-security.md
data/update/
app.new
app
从 client/ 执行:
client/
C:/Python310/python.exe -m py_compile src/update_service.py src/update_ui_event.py build_tools/launcher.py $env:QT_QPA_PLATFORM="offscreen" C:/Python310/python.exe -m pytest test -q Remove-Item Env:QT_QPA_PLATFORM .\build_client.bat
使用本地 HTTPS 测试替身覆盖清单、下载、重定向、哈希失败和恶意 ZIP;使用临时发布目录覆盖 Launcher 成功应用、移动失败、健康失败回退和主程序仍运行。最终还需对真实 HTTPS 静态发布地址及打包产物进行人工验证。
状态:进行中。属于 MVP 后续在线更新能力,依赖 #92;不纳入 #2 清单。
6d6829e feat: ?? Client ????????? (#93)
0.2.0
0.1.0
C:/Python310/python.exe -m pytest test -q --disable-warnings
.\build_client.bat
autobuy--manifest.json
data
pending.json
e485457589490e5b4724f53a7370a0d10655e16461edaccd40d88d68bc92149f
docs/task/93-client在线更新与安全回退.md
5abe81e docs: 归档任务 #93
用户已于 2026-08-11 明确验收通过。
eca9289
No dependencies set.
The note is not visible to the blocked user.
基本信息
要解决什么
#92 已建立
Launcher.exe + app/ + data/发布结构和autobuy——manifest.json,但 Client 仍需人工取得并替换更新包。需要在不阻塞界面、不覆盖本地数据、不保存更新凭据的前提下,实现用户主动检查、下载并在下次启动安全应用更新。做什么 / 不做什么
QObject + moveToThread在后台检查和下载,防重复点击并处理窗口销毁后的迟到结果。data/update/app.new,拒绝绝对路径、..、符号链接和app/以外内容。Launcher.exe在主程序未运行时应用待更新目录,保留一份app.old;移动失败立即恢复。app.old。怎么做
client/src/update_service.py:清单模型、严格版本比较、HTTPS 下载、同源校验、大小与 SHA256 校验、安全解压和待更新状态文件。client/src/update_ui_event.py:检查/下载 Worker 和生命周期管理,严格使用QObject + moveToThread。client/src/settings_ui.py增加软件更新表单,在settings_ui_event.py装配更新事件;地址使用显式保存或检查时保存,并保留输入错误。client/build_tools/launcher.py:识别仍运行的主程序、应用/恢复更新、维护app.old和健康状态。docs/client/01-requirements.md、02-architecture.md、05-ui-specification.md、06-quality-security.md。验收标准
autobuy——manifest.json一致,不一致时不生成待更新状态。app/之外内容。data/update/,不覆盖数据库、日志、任务和凭据。app.new应用为app并保留app.old;移动失败或新版本健康检查失败时能恢复旧版本。app/,并给出可理解提示。怎么验证
从
client/执行:使用本地 HTTPS 测试替身覆盖清单、下载、重定向、哈希失败和恶意 ZIP;使用临时发布目录覆盖 Launcher 成功应用、移动失败、健康失败回退和主程序仍运行。最终还需对真实 HTTPS 静态发布地址及打包产物进行人工验证。
风险和回退
app,不���在没有可启动版本时继续。data/update/,发生问题可关闭程序后移走该目录,并把app.old恢复为app。状态:进行中。属于 MVP 后续在线更新能力,依赖 #92;不纳入 #2 清单。
????(?????)
6d6829e feat: ?? Client ????????? (#93)app,??app.old;????????????????????????0.2.0?0.1.0?? Launcher ???????,???????????????;?0.2.0????????????
C:/Python310/python.exe -m pytest test -q --disable-warnings:256 passed?.\build_client.bat:???? 0.2.0 ??????? ZIP??? ZIP ?autobuy--manifest.json?app.old?? 0.1.0,data????,??????,pending.json???e485457589490e5b4724f53a7370a0d10655e16461edaccd40d88d68bc92149f????
本地归档
docs/task/93-client在线更新与安全回退.md5abe81e docs: 归档任务 #93用户已于 2026-08-11 明确验收通过。
eca9289