PowerShell循环调用可执行文件时如何实时终止WerFault进程
我来帮你搞定这个WerFault弹窗的问题!
解决方案:同步监控并终止调用过程中的WerFault进程
你现在的问题核心是:终止WerFault的代码只能在调用$executable的前后执行,但弹窗恰恰是在$executable运行时弹出的——所以我们需要让监控逻辑和$executable的执行同步进行,覆盖整个调用周期。
下面以PowerShell脚本为例,给你两种实用的实现方式:
方式一:用后台作业异步监控
这种方式会启动一个独立的后台任务持续查杀WerFault,不会阻塞主进程处理文件:
# 遍历$files数组的计数型循环 for ($i = 0; $i -lt $files.Count; $i++) { $currentFile = $files[$i] # 启动后台监控任务:持续查找并终止WerFault $monitorJob = Start-Job -ScriptBlock { while ($true) { Get-Process -Name WerFault -ErrorAction SilentlyContinue | Stop-Process -Force -ErrorAction SilentlyContinue # 每秒检查一次,平衡资源占用和响应速度 Start-Sleep -Seconds 1 } } try { # 调用可执行文件处理当前文件 & $executable $currentFile } finally { # 不管调用成功/失败,都停止监控并清理后台任务 Stop-Job $monitorJob Remove-Job $monitorJob } }
方式二:前台循环监控(更轻量)
如果你的环境限制后台作业,可以用Start-Process启动$executable,然后在前台循环监控直到进程结束:
for ($i = 0; $i -lt $files.Count; $i++) { $currentFile = $files[$i] # 启动可执行文件,返回进程对象以便监控 $process = Start-Process -FilePath $executable -ArgumentList $currentFile -PassThru -NoNewWindow # 持续监控直到进程退出 while (!$process.HasExited) { Get-Process -Name WerFault -ErrorAction SilentlyContinue | Stop-Process -Force -ErrorAction SilentlyContinue # 缩短检查间隔到500毫秒,响应更快 Start-Sleep -Milliseconds 500 } }
关键细节提醒
- 两种方式都能覆盖
$executable运行的全周期,WerFault一弹出就会被查杀; - 可以根据实际需求调整监控的时间间隔(比如把1秒改成500毫秒,或者更长);
- 额外建议:WerFault通常是
$executable处理文件时崩溃导致的,有空可以排查下特定文件是否有异常,从根源减少弹窗的出现。
内容的提问来源于stack exchange,提问作者Catu
相关产品推荐
相关产品推荐

