可通过三种方法实现程序结束自动关机:一、批处理+tasklist循环检测;二、PowerShell脚本监听进程退出;三、任务计划程序绑定安全日志事件ID 4689。

如果您希望在某个特定程序(如视频渲染软件、大型下载工具或编译任务)运行结束后自动触发关机,而非依赖固定时间或倒计时,则需通过监听该程序的进程生命周期来实现。以下是实现此目标的多种可行方法:
一、使用批处理+tasklist循环检测法
该方法利用Windows内置命令持续检查目标进程是否存在,一旦进程退出即执行关机指令,无需第三方工具,兼容所有Win10版本(含家庭版)。
1、按Win + R打开“运行”窗口,输入notepad并回车,新建记事本。
2、在记事本中输入以下内容(将notepad.exe替换为您要监听的实际程序名,例如ffmpeg.exe或chrome.exe):
@echo off
:loop
tasklist /nh /fi "imagename eq notepad.exe" | findstr /i "notepad.exe" >nul
if %errorlevel% == 0 (ping -n 3 127.0.0.1 >nul & goto loop) else (shutdown -s -f -t 0)
3、点击“文件”→“另存为”,保存类型选“所有文件”,文件名输入watch_close.bat,编码选择ANSI或UTF-8无BOM。
4、双击运行该批处理文件前,请先手动启动目标程序;批处理将保持后台运行并每3秒检测一次,目标程序关闭后立即强制关机。
二、借助PowerShell脚本实现精准进程监听
PowerShell提供更稳定的进程对象监控能力,支持等待指定进程完全终止后再执行动作,避免因进程短暂挂起导致误判。
1、右键桌面空白处,选择“新建”→“文本文档”,重命名为autooff.ps1(注意扩展名必须为.ps1)。
2、右键该文件→“编辑”,粘贴以下代码(将"vlc.exe"替换为目标程序的完整进程名):
$procName = "vlc.exe"
Write-Host "正在监听进程:$procName"
do {
$p = Get-Process -Name $procName -ErrorAction SilentlyContinue
if ($p) { Start-Sleep -Seconds 2 }
} while ($p)
Write-Host "进程已退出,执行关机..."
Stop-Computer -Force
3、以管理员身份运行PowerShell:右键“开始”按钮→“终端(管理员)”,执行命令:Set-ExecutionPolicy RemoteSigned -Scope CurrentUser(允许本地脚本运行)。
4、在管理员PowerShell中输入完整路径并回车运行脚本,例如:C:\Users\YourName\autooff.ps1。
三、使用Task Scheduler绑定进程退出事件(高级免值守方案)
此方法通过Windows事件日志机制捕获目标程序进程终止事件(Event ID 4689),再触发关机动作,全程后台静默运行,不依赖持续轮询,系统资源占用极低。
1、按下Win + R,输入eventvwr.msc并回车,打开事件查看器。
2、依次展开左侧树状目录:Windows 日志 → 安全,右侧点击“筛选当前日志”,在“事件ID”框中输入4689,点击“确定”确认该事件存在(需确保“审核进程跟踪”策略已启用)。
3、返回桌面,按Win + R输入taskschd.msc打开任务计划程序,点击右侧“创建任务”(非“基本任务”)。
4、在“常规”选项卡中命名任务(如“程序结束关机”),勾选“使用最高权限运行”和“配置为:Windows 10”。
5、切换至“触发器”选项卡→“新建”→“开始任务:基于事件”→日志选“安全”,事件ID填4689,在“XML”选项卡中勾选“编辑查询并在XML视图中手动编辑”,点击“是”,在内插入以下过滤段(将Process Name.*vlc\.exe替换为目标程序名):
6、切换至“操作”选项卡→“新建”→操作选“启动程序”,程序或脚本填shutdown.exe,参数填-s -f -t 0,点击“确定”保存任务。










