Skip to content

fix(windows): 修复 Setup 任务启动误判与回滚进程清理 - #180

Open
tibbar213 wants to merge 3 commits into
uvwt:mainfrom
tibbar213:fix/windows-setup-task-lifecycle
Open

tibbar213 wants to merge 3 commits into
uvwt:mainfrom
tibbar213:fix/windows-setup-task-lifecycle

Conversation

@tibbar213

Copy link
Copy Markdown

问题与修复

Windows Setup 的临时任务启动确认将 LastRunTime 与调用方 Get-Date 比较,仅允许 1 秒偏差。在本机,任务已运行,但调度器返回的时间早约 4.5 秒,导致错误的 75 秒超时;失败清理又可能留下占用 bin/agentdock-tray.exe 的进程,使回滚失败并阻断后续安装。

本 PR 改为记录每个唯一临时任务的运行时间基线,通过任务 Running 状态或时间基线变化确认启动,避免跨时钟比较。退出码和等待完成检查继续保留。

失败清理会先停止临时任务;对于等待模式,通过本次唯一的 stdout 诊断参数及精确宿主路径定位进程树,停止子进程并释放诊断文件句柄。成功的后台启动保持子进程存活。安装器回滚同时停止核心计划任务、generation 进程与 stable shim 进程,再恢复文件。

范围

仅修改:

  • scripts/install/launch-windows-process.ps1
  • scripts/install/install.ps1
  • scripts/test/test-windows-runtime-launch-diagnostics.ps1

未修改 Core/Tray 发布二进制、认证方式或 Tunnel 配置。补丁基于 main 的 2ffed4ee8f0392f77bb6dd4a5de268de31ffa9d3,保留上游已有的 PowerShell UTF-8 修复。

验证

  • git diff --check
  • GO111MODULE=off GOTOOLCHAIN=local go test ./scripts/test/install_windows_test.go
  • 在 Windows PowerShell 5.1 执行 test-windows-runtime-launch-diagnostics.ps1,使用官方 v0.9.1 Core CLI 和 GUI shim,模拟 60 秒调度器时间偏差
  • 验证错误退出的原始退出码和 stdout/stderr 诊断、正常退出、后台子进程存活及无控制台窗口
  • 验证真实等待超时会停止任务及其等待宿主子进程,并清理临时任务和诊断目录
  • 使用 v0.9.1 官方 ZIP(SHA-256 校验通过)及有效签名的 cloudflared 构建修正版 Setup,在同一 Windows 11 机器上连续安装两次,均退出 0;安装事务 committed、核心 v0.9.1 健康检查及配置中的公网健康检查均通过
  • 将补丁移植到最新 main 后,重新执行脚本契约测试和 Windows helper 回归测试

实机 Setup 验证针对基于 v0.9.1 重打包的安装包;移植到最新 main 后未重新构建该分支的完整发布载荷。未运行完整跨平台测试或隔离账户下的 Windows installer E2E 套件。

审查重点

  • 仅取消失败启动对应的临时任务;成功的非等待启动不会被清理。
  • 子进程清理限定为精确匹配本次唯一诊断参数的等待宿主及其后代。
  • 进程清理错误不会覆盖原始安装错误;任务停止与注销继续保持有界清理。

Closes #179.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

bug(windows): 安装器误判临时任务启动超时,随后回滚因托盘文件占用失败

1 participant