diff --git a/deploy/watchdog.ps1 b/deploy/watchdog.ps1 index 84c62db..ecb3943 100644 --- a/deploy/watchdog.ps1 +++ b/deploy/watchdog.ps1 @@ -101,11 +101,25 @@ if (-not $FeishuWebhook) { } # Docker Desktop 登录后偶尔尚未就绪,先等待并尝试拉起。 +# 注意:本脚本以 SYSTEM 身份运行,绝不能直接 Start-Process Docker Desktop.exe。 +# WSL 不支持本地系统账户运行(WSL_E_LOCAL_SYSTEM_NOT_SUPPORTED), +# 以 SYSTEM 启动会把 docker-desktop 发行版搞成僵死状态(VHD 已挂载无法终止), +# 结果是登录用户会话里的 Docker Desktop 也永远起不来。 +# 因此改为触发以登录用户身份运行的 FruitShorts-DockerDesktop 计划任务。 if (-not (Test-Docker)) { - Write-Log "Docker 未就绪,尝试启动 Docker Desktop" - $dockerExe = "C:\Program Files\Docker\Docker\Docker Desktop.exe" - if (Test-Path $dockerExe) { - Start-Process -FilePath $dockerExe + Write-Log "Docker 未就绪,尝试通过用户会话启动 Docker Desktop" + $desktopTask = "FruitShorts-DockerDesktop" + try { + # Docker Desktop.exe 是任务进程树的一部分,GUI 活着时任务一直是 Running, + # 直接 Start-ScheduledTask 会被 IgnoreNew 忽略,所以先结束旧实例再拉起。 + $t = Get-ScheduledTask -TaskName $desktopTask -ErrorAction Stop + if ($t.State -eq "Running") { + Stop-ScheduledTask -TaskName $desktopTask -ErrorAction SilentlyContinue + Start-Sleep -Seconds 5 + } + Start-ScheduledTask -TaskName $desktopTask -ErrorAction Stop + } catch { + Write-Log "触发 Docker Desktop 启动任务失败: $_" } for ($i = 0; $i -lt 18; $i++) {