diff --git a/runtime/operations/scripts/weixin_start.ps1 b/runtime/operations/scripts/weixin_start.ps1 index b2a02780..9235a0f1 100644 --- a/runtime/operations/scripts/weixin_start.ps1 +++ b/runtime/operations/scripts/weixin_start.ps1 @@ -36,16 +36,19 @@ function Get-SidecarProcesses { } } +function Invoke-TaskKillQuiet { + param( + [Parameter(Mandatory = $true)] + [string]$ProcessId + ) + cmd.exe /c "taskkill /PID $ProcessId /T /F 1>nul 2>nul" | Out-Null + return $LASTEXITCODE +} + function Stop-SidecarProcesses { $procs = @(Get-SidecarProcesses | Sort-Object ProcessId -Descending) - $oldNativePref = $PSNativeCommandUseErrorActionPreference - try { - $PSNativeCommandUseErrorActionPreference = $false - foreach ($proc in $procs) { - taskkill.exe /PID $proc.ProcessId /T /F 2>$null | Out-Null - } - } finally { - $PSNativeCommandUseErrorActionPreference = $oldNativePref + foreach ($proc in $procs) { + [void](Invoke-TaskKillQuiet -ProcessId ([string]$proc.ProcessId)) } return $procs.Count } diff --git a/runtime/operations/scripts/weixin_stop.ps1 b/runtime/operations/scripts/weixin_stop.ps1 index 834865d5..eb96f811 100644 --- a/runtime/operations/scripts/weixin_stop.ps1 +++ b/runtime/operations/scripts/weixin_stop.ps1 @@ -37,27 +37,33 @@ function Get-SidecarProcesses { } } +function Invoke-TaskKillQuiet { + param( + [Parameter(Mandatory = $true)] + [string]$ProcessId, + [switch]$ForceKill + ) + $forceArg = "" + if ($ForceKill) { $forceArg = " /F" } + cmd.exe /c "taskkill /PID $ProcessId /T$forceArg 1>nul 2>nul" | Out-Null + return $LASTEXITCODE +} + function Stop-SidecarProcesses { param( [switch]$ForceKill ) $procs = @(Get-SidecarProcesses | Sort-Object ProcessId -Descending) - $oldNativePref = $PSNativeCommandUseErrorActionPreference - try { - $PSNativeCommandUseErrorActionPreference = $false - foreach ($proc in $procs) { - if ($ForceKill) { - taskkill.exe /PID $proc.ProcessId /T /F 2>$null | Out-Null - continue - } - taskkill.exe /PID $proc.ProcessId /T 2>$null | Out-Null - if ($LASTEXITCODE -ne 0) { - # Some process trees require force kill on Windows. - taskkill.exe /PID $proc.ProcessId /T /F 2>$null | Out-Null - } + foreach ($proc in $procs) { + if ($ForceKill) { + [void](Invoke-TaskKillQuiet -ProcessId ([string]$proc.ProcessId) -ForceKill) + continue + } + $code = Invoke-TaskKillQuiet -ProcessId ([string]$proc.ProcessId) + if ($code -ne 0) { + # Some process trees require force kill on Windows. + [void](Invoke-TaskKillQuiet -ProcessId ([string]$proc.ProcessId) -ForceKill) } - } finally { - $PSNativeCommandUseErrorActionPreference = $oldNativePref } return $procs.Count } @@ -79,20 +85,14 @@ if (-not $procId) { exit 0 } -$oldNativePref = $PSNativeCommandUseErrorActionPreference -try { - $PSNativeCommandUseErrorActionPreference = $false - if ($Force) { - taskkill.exe /PID $procId /T /F 2>$null | Out-Null - } else { - taskkill.exe /PID $procId /T 2>$null | Out-Null - if ($LASTEXITCODE -ne 0) { - # Retry with /F to avoid noisy parent/child kill failures. - taskkill.exe /PID $procId /T /F 2>$null | Out-Null - } +if ($Force) { + [void](Invoke-TaskKillQuiet -ProcessId ([string]$procId) -ForceKill) +} else { + $code = Invoke-TaskKillQuiet -ProcessId ([string]$procId) + if ($code -ne 0) { + # Retry with /F to avoid noisy parent/child kill failures. + [void](Invoke-TaskKillQuiet -ProcessId ([string]$procId) -ForceKill) } -} finally { - $PSNativeCommandUseErrorActionPreference = $oldNativePref } $killed = Stop-SidecarProcesses -ForceKill:$Force diff --git a/runtime/operations/scripts/whatsapp_stop.ps1 b/runtime/operations/scripts/whatsapp_stop.ps1 index 9e4eda4b..79822ee2 100644 --- a/runtime/operations/scripts/whatsapp_stop.ps1 +++ b/runtime/operations/scripts/whatsapp_stop.ps1 @@ -19,15 +19,27 @@ $oclawRoot = Resolve-RepoRoot $sidecarRoot = Join-Path $oclawRoot "data\\channel_sidecar\\$ChannelId" $sidecarPidFile = Join-Path $sidecarRoot "pid.txt" +function Invoke-TaskKillQuiet { + param( + [Parameter(Mandatory = $true)] + [string]$ProcessId, + [switch]$ForceKill + ) + $forceArg = "" + if ($ForceKill) { $forceArg = " /F" } + cmd.exe /c "taskkill /PID $ProcessId /T$forceArg 1>nul 2>nul" | Out-Null + return $LASTEXITCODE +} + if (Test-Path $sidecarPidFile) { $procId = (Get-Content -Path $sidecarPidFile -ErrorAction SilentlyContinue | Select-Object -First 1) if ($procId) { if ($Force) { - taskkill.exe /PID $procId /T /F 2>$null | Out-Null + [void](Invoke-TaskKillQuiet -ProcessId ([string]$procId) -ForceKill) } else { - taskkill.exe /PID $procId /T 2>$null | Out-Null - if ($LASTEXITCODE -ne 0) { - taskkill.exe /PID $procId /T /F 2>$null | Out-Null + $code = Invoke-TaskKillQuiet -ProcessId ([string]$procId) + if ($code -ne 0) { + [void](Invoke-TaskKillQuiet -ProcessId ([string]$procId) -ForceKill) } } }