提交人: dummycopy
客户端版本: 0.1.66
现象
自动更新补丁下载完成并进入应用阶段后,Cindy 会关闭,但没有自动重新启动。再次手动打开时仍是旧应用,启动数秒后又会主动退出,用户感知为“更新后无法重启,重新打开即闪退”。
复现步骤
- 使用存在可用更新的旧版 Cindy。
- 等待补丁下载完成,并满足自动应用更新的条件。
- Cindy 主进程退出。
- 等待自动重新启动,但应用没有再次打开。
- 手动打开 Cindy。
- 旧版检测到仍然存在的本地补丁,再次进入更新流程并主动退出。
期望行为
- 外部更新器应在主进程退出后可靠存活,完成解压、替换应用并重新启动 Cindy。
- 如果更新器交接或安装失败,应保留可运行的旧版本、明确提示失败,并停止自动退出重试,避免形成启动循环。
实际行为
- 外部更新脚本启动并确认旧主进程已经退出。
- 脚本在“等待文件系统稳定”的固定 2 秒等待阶段提前终止。
- 后续的补丁解压、应用替换和重新启动均未执行。
- 本地补丁继续保留,旧版下次启动后再次执行更新并以正常退出码主动关闭,因此表面上像闪退。
复现频率
在同一设备上连续记录到 28 次更新尝试,28 次均启动了更新脚本,但解压和重启验证次数均为 0;每次都停在同一个阶段。此前同一更新链路曾正常完成。
已尝试
- 手工安装新版本后可以正常启动和使用。
- 已验证应用签名与 Apple 公证有效。
- 已验证应用目录和更新目录具有写权限。
- 已确认自动重启设置处于启用状态。
- 未发现与本次退出对应的系统崩溃报告或 Crashpad dump。
脱敏诊断摘要
- 更新脚本的执行顺序为:等待旧 PID 退出 → 记录“等待文件系统稳定” →
sleep 2 → 写更新锁 → 解压补丁 → 替换应用 → open 新应用。
- 所有失败记录均只到
sleep 2 之前;更新锁、解压日志和脚本末尾的自删除均未发生,临时目录中遗留的脚本数量与失败次数一致。
- 主进程诊断记录为
exitCode=0、reason=update-relaunch,说明“再次打开即退出”不是 native crash,而是旧版主动重试更新。
- macOS 分支的
executeUpdateMacOS() 在 spawn('/bin/bash', ..., { detached: true, stdio: 'ignore' }).unref() 后立即调用 forceQuit() / process.exit(0),没有 updater 启动握手、存活确认或失败回传。
- 现有日志无法确定 updater 收到的具体终止信号或信号来源,因此不应把 Electron、系统进程管理或安全组件中的某一个直接认定为已证实的触发源。
建议排查方向
- 为 macOS updater 增加独立、可验证的生命周期托管。
- 主进程仅在 updater 完成启动握手并确认可独立存活后退出。
- updater 增加信号捕获、退出原因记录和安装结果回传。
- 补充打包后的 Electron 端到端更新测试,而不仅验证生成的 shell 脚本本身。
- 更新交接失败后停止启动时自动重试,并提供恢复或手工安装入口。
OS: darwin arm64 (27.0.0)
Harness: Codex
Model ID: gpt-5.6-sol
界面语言: zh-CN
提交人: dummycopy
客户端版本: 0.1.66
现象
自动更新补丁下载完成并进入应用阶段后,Cindy 会关闭,但没有自动重新启动。再次手动打开时仍是旧应用,启动数秒后又会主动退出,用户感知为“更新后无法重启,重新打开即闪退”。
复现步骤
期望行为
实际行为
复现频率
在同一设备上连续记录到 28 次更新尝试,28 次均启动了更新脚本,但解压和重启验证次数均为 0;每次都停在同一个阶段。此前同一更新链路曾正常完成。
已尝试
脱敏诊断摘要
sleep 2→ 写更新锁 → 解压补丁 → 替换应用 →open新应用。sleep 2之前;更新锁、解压日志和脚本末尾的自删除均未发生,临时目录中遗留的脚本数量与失败次数一致。exitCode=0、reason=update-relaunch,说明“再次打开即退出”不是 native crash,而是旧版主动重试更新。executeUpdateMacOS()在spawn('/bin/bash', ..., { detached: true, stdio: 'ignore' }).unref()后立即调用forceQuit()/process.exit(0),没有 updater 启动握手、存活确认或失败回传。建议排查方向
OS: darwin arm64 (27.0.0)
Harness: Codex
Model ID:
gpt-5.6-sol界面语言: zh-CN