Windows 安装包反复报错?一次排查补上了 5 个 CI 检查点

这次排查的起点,是一个版本回归:见字工作台 Windows 端 1.0.1 能正常安装、启动;升级到 1.0.2 后,安装器先后出现旧程序无法关闭、无法覆盖卸载程序、运行数据目录无法创建等提示。即使安装完成,双击应用仍报主进程错误。这些现象跨了安装和启动环节,一开始很难判断是不是同一个故障,也容易先怀疑 Electron 或最近的包版本升级。

我花了一整天追下来,真正有用的不是再猜一个版本,而是把安装、权限、启动和 CI 验证拆成几段,逐段找证据。

这次排查里,文件安全属性出现了 CodexSandboxUsers 这一组。移除后重新打包,安装和启动都恢复正常。这是我们在这台机器、这批构建产物上观察到的强线索,不是 Windows 的通用结论。另一个结果是:原来 CI 只证明"能构建",现在我已经把真实安装和启动检查接进 Windows 流程,安装器 smoke 与 verify 均通过。

第一次转向:报错不同,先别认定是同一个问题

屏幕先后出现过"见字无法关闭""不能覆盖卸载程序"和"运行数据目录无法创建"。它们看起来都像安装器坏了,但实际落在不同阶段:一个发生在旧程序文件替换时,一个发生在目录选择和创建时。重启电脑、换空目录、改安装路径都没有消掉提示。

我们因此先把故障拆开记录:卸载程序是否还被占用?目录到底有没有创建出来?安装程序是否能在目标位置写入?这些问题不能用同一条"权限不足"概括。

第二次转向:写入失败,也可能是探针写错了路径

PowerShell 的第一次写入测试报"找不到路径的一部分"。当时很容易把它理解成没有权限,回头看才发现:探针写入的目录本身并不存在。路径不存在和目录拒绝写入,是不同的失败原因。

补测父目录和新建临时目录后,Programs 基目录可以写入;再对比文件属性,才看到临时产物和项目目录中的 exe 安全组不同,其中包含 CodexSandboxUsers。移除这项后重新构建,安装包能装、程序也能打开。这个结果把排查方向从"是不是 Electron 一升级就坏了",拉回到具体的构建产物和文件 ACL;但它仍只说明这台机器上的对照结果,不能单独解释此前每个症状。

第三次转向:CI 也可能在测错东西

我们给 GitHub Actions 增加了 Windows 安装 smoke:用 NSIS 静默安装,再启动已安装的程序,检查本地服务健康接口和 renderer-ready 状态。

第一轮 CI 在 120 秒超时处失败。后来从日志确认,安装本身约用了 244 秒;测试的时间上限太短,不等于安装器失败。把上限调到 300 秒后,下一轮又卡在服务探测:脚本假设能从固定日志路径读到随机端口。修正端口发现后,API 检查通过,renderer 日志位置和冷启动等待又暴露出测试脚本的假设。调整后,Windows 安装器 smoke 和 verify 最终通过。

下次打包,至少检查这五步

  1. 安装包生成:确认 CI 产出了目标 Windows 安装器。
  2. 静默安装完成:给安装留足真实时间,并检查安装器退出码。
  3. 已安装文件存在:检查主程序和卸载程序都落在预期目录。
  4. 本地服务健康:启动安装后的应用,确认健康接口返回成功。
  5. 界面握手完成:等待 renderer-ready 信号,而不只看进程还活着。

构建成功,只说明编译和打包命令结束;真实安装、服务启动、界面就绪,是另外几件事。每一关都应该有对应证据,失败时保留日志和进程信息。否则一个超时可能只是测试脚本没跟上真实环境,却被误判成产品故障。

这次最实用的收获,不是"Windows 权限总会出问题",而是排障时要问清楚:我现在测的是哪一步,证据能证明什么,不能证明什么。

你们的 Windows 桌面 CI,目前检查到安装器退出,还是也会启动已安装程序并验证界面?

相关推荐
陈随易16 分钟前
Cloudflare 出钱,Vite 团队挑人,44 个维护者分 30 万美元
前端·后端·程序员
SimonKing27 分钟前
震惊:怎么回事,opencode一轮对话耗尽免费额度
java·后端·程序员
张彦峰ZYF1 小时前
功能齐了不等于能上线:智能工单系统的AI回归测试、安全防护、成本可观测与CI/CD生产部署
后端·企业智能工单系统·评测线·安全线·成本线·部署线
Rain的Java大神之路1 小时前
LeetCode 37 解数独面试攻略:回溯 + 位掩码 + MRV,从暴力到毫秒级求解
java·后端·leetcode
量化分析码农1 小时前
【Python量化波动率实战 05】你的组合真的分散了吗:滚动相关与分散化收益
后端
IT_陈寒2 小时前
Vue这个奇葩的响应式问题让我加班到凌晨
前端·人工智能·后端
脚本自动化开发9 小时前
存储涨价后,磐镭WO5迷你主机值得买吗
后端
一只爱撸猫的程序猿11 小时前
我看着一个 AI 引擎在 14 天里,从"记忆"走进了"搜索"
人工智能·后端·架构
陈随易14 小时前
纯 Go 写的 JS 引擎,跑分超过了 C 语言的 QuickJS
前端·后端·程序员