win-08-packaging-release

Windows App Workflow 阶段 7 —— Windows 打包、代码签名、自动更新与发布。适用场景:应用通过验收,需要产出安装包/绿色版、完成代码签名、搭建自动更新与灰度发布并执行发布时间线。提炼自 Desktop App Engineer 的分发工程与 NEXUS Phase 5 发布时间线。

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(文档与运营)。