You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Windows下如何在特定.exe启动时触发事件或通知?

在Windows中触发特定应用启动时执行后台任务的方法

方法一:用任务计划程序(Task Scheduler)实现原生触发

这是Windows自带的轻量化方案,步骤如下:

  • 打开任务计划程序,点击「创建任务」
  • 「常规」标签页:给任务起个名字,勾选「不管用户是否登录都要运行」(要后台执行的话必选),设置好权限
  • 「触发器」标签页:点「新建」,选择「事件」作为触发类型
  • 事件设置选「自定义」,点击「新建筛选器」:
    • 事件日志选「Windows日志 -> 系统」,或者如果需要精准捕获进程创建,先启用Sysmon(微软免费工具)的进程创建日志,之后选「应用程序和服务日志 -> Microsoft -> Windows -> Sysmon -> Operational」
    • 筛选条件设置为Image字段等于你的目标exe完整路径(比如C:\Program Files\YourApp\target.exe),或者对应事件ID(比如部分服务启动对应ID 7001)
  • 「操作」标签页:点「新建」,选「启动程序」,填入你的数据同步脚本路径(比如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

火山引擎 最新活动