win-08-packaging-release
Windows App Workflow 阶段 7 —— Windows 打包、代码签名、自动更新与发布。适用场景:应用通过验收,需要产出安装包/绿色版、完成代码签名、搭建自动更新与灰度发布并执行发布时间线。提炼自 Desktop App Engineer 的分发工程与 NEXUS Phase 5 发布时间线。
SKILL.mdskills/windows-app-workflow/08-packaging-release/SKILL.md
GitHub阶段 7:打包、签名与发布
目标:让用户双击安装不弹"未知发布者",让更新永远不砸锅。更新器是你拥有的最关键代码——应用崩了烦一个用户一次,更新器坏了把所有用户永远困住。
1. 打包格式选择
| 格式 | 工具 | 适用 |
|---|---|---|
| NSIS 安装器 | electron-builder / tauri bundler / NSIS 脚本 | 最常见;支持自定义安装流程、开始菜单/桌面快捷方式、卸载器 |
| MSI | WiX | 企业分发、组策略部署 |
| MSIX / AppX | MSIX Packaging | 微软商店、干净卸载、自动沙箱;但文件系统/注册表访问受限 |
| 绿色版(portable zip) | 打包产物即可 | 无管理员权限环境、极客用户;注意便携模式的数据位置 |
建议:NSIS(或等价)为主安装包 + 提供绿色版;企业需求再补 MSI。安装器必须:支持静默安装参数、写入"设置→应用"可见的卸载入口、升级时保留用户数据。
2. 代码签名(不签名 = 训练用户点过警告,总有一天警告是真的)
- 证书:OV 证书起步(可过签名校验);EV 证书能立即获得 SmartScreen 信誉(新发布者否则会被"未知发布者"警告,需要下载量慢慢攒信誉)
- 签名方式:优先云 HSM(如 Azure Sign Tool + Azure Key Vault)——证书文件不进 CI;时间戳服务器必加(证书过期后已签名构建依然有效)
- 签什么:主程序、安装包、更新清单、所有随附 DLL/辅助程序
# release.yml 核心(照 Desktop App Engineer 的流水线)
- name: Sign (Windows) # 证书放 Key Vault,CI 里不落文件
run: azuresigntool sign -kvu $VAULT_URI -kvc $CERT_NAME -tr http://timestamp.digicert.com out/*.exe
publish:
needs: build-sign
steps:
- run: node scripts/publish-update.js --channel stable --rollout 1
# 1% 灰度 24h → 崩溃率 ≥99.5% 无崩溃 → 10% → 100%
# 回滚 = 重新发布上一版清单;N+1 客户端能干净降级
3. 自动更新
- 清单(manifest)签名 + HTTPS 分发;客户端校验失败即拒装
- 灰度发布:1% → 10% → 100%,每级看崩溃率与更新成功率,指标红自动暂停
- 回滚路径必须演练过(阶段 4 的 walking skeleton 已做一次,发布前再确认一次)
- 更新失败要有用户可见的提示与手动下载兜底页
- 渠道策略:stable / beta(想尝鲜的用户自助加入)
4. 发布时间线(压缩版,来自 Phase 5)
- T-7:内容就绪(下载页文案、截图、README、CHANGELOG);技术就绪(签名产物、更新通道、下载页哈希);找 2–3 台干净机器做最后演练
- T-1:冻结代码;最后跑一次全量测试与 Reality Check 快检;写好回滚操作卡
- T-0:发布 → 1 小时内盯崩溃上报/下载量/反馈渠道 → 当天问题当天热修或回滚
- T+1 ~ T+7:每日看崩溃率、更新成功率、用户反馈;热修走加急通道(直接签名发补丁版)
- T+14:复盘:指标对阶段 1 的 North Star;把教训写回本 skill 的"经验"节
5. 发布检查表(逐项打勾才能发)
- 版本号、CHANGELOG、tag 一致
- 安装包 + 主程序 + 清单全部签名并验证通过
- 干净机器:全新安装 / 覆盖升级 / 卸载残留 三种走查截图
- 更新通道:1% 灰度配置正确,回滚预案在手
- 下载页含 SHA-256 与隐私政策
- 崩溃上报看板在线
- 回滚操作卡已写(谁、哪步、几分钟内完成)
6. 质量门
| # | 判据 | 证据 | 通过? |
|---|---|---|---|
| 1 | 100% 产物签名,签名验证通过 | signtool verify 输出 | ☐ |
| 2 | 干净机器三走查通过 | 截图 | ☐ |
| 3 | 更新灰度 + 回滚演练通过 | 演练记录 | ☐ |
| 4 | 发布检查表全勾 | 本文件 | ☐ |
发布后 → 阶段 8(文档与运营)。