Windows下如何在特定.exe启动时触发事件或通知?
在Windows中触发特定应用启动时执行后台任务的方法
方法一:用任务计划程序(Task Scheduler)实现原生触发
这是Windows自带的轻量化方案,步骤如下:
- 打开任务计划程序,点击「创建任务」
- 「常规」标签页:给任务起个名字,勾选「不管用户是否登录都要运行」(要后台执行的话必选),设置好权限
- 「触发器」标签页:点「新建」,选择「事件」作为触发类型
- 事件设置选「自定义」,点击「新建筛选器」:
- 事件日志选「Windows日志 -> 系统」,或者如果需要精准捕获进程创建,先启用
Sysmon(微软免费工具)的进程创建日志,之后选「应用程序和服务日志 -> Microsoft -> Windows -> Sysmon -> Operational」 - 筛选条件设置为
Image字段等于你的目标exe完整路径(比如C:\Program Files\YourApp\target.exe),或者对应事件ID(比如部分服务启动对应ID 7001)
- 事件日志选「Windows日志 -> 系统」,或者如果需要精准捕获进程创建,先启用
- 「操作」标签页:点「新建」,选「启动程序」,填入你的数据同步脚本路径(比如
powershell.exe -File "C:\Scripts\sync-data.ps1"),或者直接调用后台服务的启动命令 - 保存任务后,目标exe一启动,任务就会自动触发
方法二:用PowerShell脚本实时监控进程
如果需要更灵活的逻辑控制(比如应用运行期间重复同步),可以写个后台监控脚本:
$targetExePath = "C:\Program Files\YourApp\target.exe" $syncScript = "C:\Scripts\sync-data.ps1" $isSyncRunning = $false while ($true) { $targetProcess = Get-Process | Where-Object {$_.Path -eq $targetExePath} -ErrorAction SilentlyContinue if ($targetProcess -and !$isSyncRunning) { # 启动同步任务,隐藏窗口后台执行 Start-Process powershell.exe -ArgumentList "-File `"$syncScript`"" -WindowStyle Hidden $isSyncRunning = $true } elseif (!$targetProcess -and $isSyncRunning) { # 应用关闭后重置标记,下次启动再触发 $isSyncRunning = $false } Start-Sleep -Seconds 5 # 每5秒检查一次进程状态 }
- 把脚本存为
process-monitor.ps1,再通过任务计划程序设置成开机自启动,就能持续后台监控 - 如果只是要监控exe名称(不区分路径),把
$targetExePath改成exe文件名(比如target.exe),用Get-Process -Name $targetExeName就行
补充提示
- 任务计划程序的事件触发更省资源,不需要一直跑脚本;PowerShell监控则适合处理复杂逻辑,比如应用运行期间定时重复同步
- 如果要在应用运行期间持续同步,可以在同步脚本里加循环,直到检测到目标进程关闭为止
内容的提问来源于stack exchange,提问作者mmo




