Windows中可通过PowerShell脚本定期检测并重启假死GUI应用,核心是利用Get-Process的Responding属性精准识别无响应进程($false),再强制终止并延迟重启;支持多程序监控、自定义启动路径及部署为系统级定时任务。
windows 中可以通过 powershell 脚本实现对假死应用程序的定期检测与自动重启,核心思路是:**识别进程是否无响应 → 强制终止 → 延迟后重新启动**。关键不在“重启”本身,而在准确判断“假死”——即进程仍在运行但已失去交互能力(如窗口冻结、不响应鼠标键盘、cpu占用极低但状态为 running)。
判断程序是否假死:用 Responding 属性最可靠
PowerShell 的 Get-Process 返回对象包含 Responding 属性,它直接反映 Windows 系统对 UI 线程的健康检查结果。比单纯看 CPU 或内存更准确,也比 ping 窗口句柄更轻量。
- 值为 $false 表示该进程已假死(常见于资源管理器、Edge、微信、钉钉等 GUI 应用)
- 值为 $true 表示正常响应(即使 CPU 为 0%)
- 注意:仅对拥有 UI 线程的进程有效(控制台程序如 cmd.exe、powershell.exe 通常无此属性)
编写基础重启脚本:以 explorer.exe 为例
以下脚本每 5 分钟检查一次资源管理器是否假死,若假死则重启:
$appName = "explorer"
$proc = Get-Process -Name $appName -ErrorAction SilentlyContinue
if ($proc -and -not $proc.Responding) {
Write-Warning "$appName 已无响应,正在重启..."
Stop-Process -Name $appName -Force
Start-Sleep -Seconds 2
Start-Process explorer.exe
} else {
Write-Host "$appName 状态正常" -ForegroundColor Gray
}
- 使用 -ErrorAction SilentlyContinue 避免进程不存在时报错中断
- Stop-Process -Force 确保彻底终止,尤其对卡死进程有效
- 重启前加 Start-Sleep -Seconds 2,防止资源未释放干净导致 explorer 启动失败
扩展为多程序监控:支持自定义列表与启动路径
可将需监控的应用写入数组,并为每个应用指定启动命令(避免仅靠进程名无法重建):
$monitoredApps = @(
@{ Name = "explorer"; Cmd = "explorer.exe" },
@{ Name = "chrome"; Cmd = "chrome.exe" },
@{ Name = "msedge"; Cmd = "msedge.exe" }
)
foreach ($app in $monitoredApps) {
$procs = Get-Process -Name $app.Name -ErrorAction SilentlyContinue
if ($procs) {
$hung = $procs | Where-Object { -not $_.Responding }
if ($hung) {
Write-Warning "发现 $($app.Name) 假死进程 $($hung.Id),正在重启"
$hung | Stop-Process -Force
Start-Sleep -Milliseconds 1500
Start-Process $app.Cmd -ErrorAction SilentlyContinue
}
}
}
- 用 Where-Object { -not $_.Responding } 批量筛选所有无响应实例
- 对 Chrome/Edge 等多进程应用,只终止无响应的 tab 进程,不影响其他正常窗口
- 启动命令写成变量,便于统一管理或适配不同安装路径(如微信可写
"C:\Program Files\Tencent\WeChat\WeChat.exe")
部署为定时任务:确保开机自启且后台静默运行
将脚本保存为 watch-apps.ps1,再通过 schtasks 注册为每 5 分钟运行一次的任务:
schtasks /create /tn "AppWatchdog" /sc minute /mo 5 /tr "powershell.exe -ExecutionPolicy Bypass -File C:\Scripts\watch-apps.ps1" /ru SYSTEM /rl HIGHEST /f
- /ru SYSTEM 使用系统账户运行,绕过用户登录限制,避免任务在锁屏时失效
- -ExecutionPolicy Bypass 临时跳过执行策略限制(比改全局策略更安全)
- /rl HIGHEST 保证足够权限终止系统级进程(如 explorer)
- 建议脚本路径放在非用户目录(如
C:\Scripts\),避免权限或路径空格问题

















