如何在processA启动时自动运行processB?避免资源消耗型循环脚本
实现进程启动时自动触发另一个进程的方法
方法一:任务计划程序(系统原生工具,推荐)
任务计划程序支持进程启动的事件触发,之前没找到触发条件是因为需要自定义事件筛选,具体步骤:
- 打开「任务计划程序」,点击右侧「创建任务」(不要用「创建基本任务」,功能受限)
- 切换到「触发器」选项卡,点击「新建」
- 在「开始任务」下拉框选「事件」,点击「自定义」→「编辑筛选器」
- 在筛选器窗口设置:
- 「事件日志」选「系统」
- 「来源」选「Microsoft-Windows-ProcessCreation」
- 「事件ID」填「4688」(Windows记录进程创建的标准事件ID)
- 切换到「XML」标签,勾选「手动编辑查询」,替换成以下XML代码(把
C:\Path\To\r6.exe改成你的processA绝对路径):
<QueryList> <Query Id="0" Path="System"> <Select Path="System">*[System[Provider[@Name='Microsoft-Windows-ProcessCreation'] and EventID=4688]] and *[EventData[Data[@Name='NewProcessName']='C:\Path\To\r6.exe']]</Select> </Query> </QueryList>
- 切换到「操作」选项卡,点击「新建」,选「启动程序」,在「程序或脚本」栏填入processB的绝对路径(比如
C:\Path\To\r6tracker.exe) - 在「条件」「设置」选项卡按需调整,比如勾选「不管用户是否登录都要运行」,最后保存任务。
方法二:WMI事件订阅(PowerShell实现)
用PowerShell注册WMI事件监听器,基于系统事件触发,无循环资源消耗:
- 右键以管理员身份打开PowerShell
- 运行以下命令(替换成你的进程路径):
# 监听r6.exe启动事件,触发时启动r6tracker $query = "SELECT * FROM Win32_ProcessStartTrace WHERE ProcessName='r6.exe'" Register-WmiEvent -Query $query -Action { Start-Process "C:\Path\To\r6tracker.exe" }
- 该命令会在后台监听目标进程启动,触发时自动执行启动动作
- 注意:WMI事件订阅在系统重启后失效,若需持久化,可将这段脚本做成开机启动的任务计划。
注意事项
- 所有路径必须填绝对路径,避免因工作目录问题导致启动失败
- 任务计划或PowerShell脚本需要足够权限,确保能正常启动目标进程
内容的提问来源于stack exchange,提问作者Luca Bakavic
相关产品推荐
相关产品推荐

