Skip to content

[Bug] 启动下载更新补丁后未应用却自动重启客户端 #1800

Description

@qsoyq

问题描述 / What happened

启动 Cindy 桌面端时,客户端会在 Splash 阶段检查并下载更新补丁。补丁下载完成后,客户端会自动重启。

但这次重启发生时,补丁实际上还没有被应用;客户端重启后仍然提示用户“有更新可以应用”,需要再次手动操作。

实际行为:

  1. 启动桌面端。
  2. 客户端检查到新版本并下载更新补丁。
  3. 补丁下载完成后,客户端自动重启。
  4. 重启后,更新仍显示为可应用状态。

期望行为:

  1. 启动时可以自动检查并下载补丁。
  2. 补丁下载完成后继续进入客户端,不应仅因为下载完成而自动重启。
  3. 用户点击“应用更新”后,再退出客户端并由更新器替换安装包。
  4. 应用完成后重新启动进入新版本,且不再重复提示同一个更新。

环境 / Environment

  • Cindy 版本或 commit / version or commit: 0.1.31
  • 平台与版本 / platform & OS version: macOS 26.4 arm64
  • 安装方式 / install method: macOS 正式打包版本

复现步骤 / Steps to reproduce

  1. 使用一个低于 CDN manifest 最新版本的正式版 Cindy。
  2. 启动客户端。
  3. 等待启动更新流程完成补丁下载。
  4. 观察客户端是否在用户确认前自动重启。
  5. 重启后观察更新提示状态。

日志与截图 / Logs & screenshots

暂无附件。

源码定位

当前实现已经具备“只下载并暂存补丁”的状态:

  • apps/desktop/src/main/updateService.tsdoCheckForUpdate() 下载并校验 ZIP 后,将补丁写入 updates/patch-info.json,并把状态设置为 ready
  • 同一文件的 buildStartupReadyReply() 在启动阶段发现补丁 ready 后,直接返回 action: 'relaunch'
  • apps/desktop/src/renderer/contexts/EnvCheckContext.tsx 收到 action: 'relaunch' 后进入 update_done
  • apps/desktop/src/renderer/hooks/useSplash.ts 随后自动调用 autoRelaunchToUpdate(),触发客户端重启和更新器执行。

因此,当前重启不是 Electron 下载补丁所必需的步骤,而是启动更新流程把“下载完成”和“应用更新”合并后的结果。

建议验收标准

  • 启动阶段下载并校验补丁后,客户端保持运行。
  • 下载完成后显示更新已准备就绪的提示。
  • 用户未确认应用更新时,不调用 autoRelaunchToUpdate()
  • 用户明确点击应用更新后,才退出客户端并启动外部更新器。
  • 应用成功后,新版本启动且同一补丁不再重复提示。
  • 更新下载失败时仍可重试,不因下载状态误触发重启。
  • 覆盖 macOS 与 Windows 的启动下载、手动应用和重启后状态恢复。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions