任务计划程序,当确定的 ParentProcessName 中的 .exe 关闭时运行任务

任务计划程序,当确定的 ParentProcessName 中的 .exe 关闭时运行任务

我有一个.bat,它打开两个.exe:

explorer programA.exe
explorer programB.exe

让我们忘记 ProgramB.exe,专注于 A.exe

ProgramA.exe 创建了 3 个子进程,这些子进程不会在 ProgramA.exe 关闭时关闭,因此我尝试创建一个任务来终止 programA.exe 的子进程。其行为如下:

程序A,它有一个父进程名称=explorer.exe,再次执行或另一个实例程序A父进程名称=ProgramA.exe,然后杀死第一个程序A(其中有父进程名称=explorer.exe

我的任务触发器是这样的:

  <QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">
     *[System[Provider[@Name='Microsoft-Windows-Security-Auditing'] and Task = 13313 and (band(Keywords,9007199254740992)) and (EventID=4689)]] 
   and 
     *[EventData[Data[@Name='ProcessName'] and (Data='C:\ProgramA.exe')]]
    </Select>
  </Query>
</QueryList>

当第一个实例被终止时,它将终止 ProgramA 的子进程(父进程名称=explorer.exe),但当它再次运行时,这些子进程是正常运行所必需的父进程名称=ProgramA.exe

我尝试将触发器改为:

*[EventData[Data[@Name='ProcessName'] and (Data='C:\ProgramA.exe') and (ParentProcessName='C:\ProgramA.exe')]]

但这不是正确的合成。

总结:我只想在 ParentProcessName='C:\ProgramA.exe' 的 .exe 关闭/终止/结束时运行任务

答案1

将所有内容合并到一个 .bat 文件中可能会更容易。例如:

net start <anApp Service>
"C:\Program Files\<folder>\<anApp.exe>"
net stop <anApp Service>
kill <childProccessA.exe>
kill <childProccessB.exe>
rundll32 user32.dll,MessageBeep
pause

这与我使用的代码类似:

  • 启动应用程序需要的服务,但我不希望该服务持续运行。在服务启动之前,不会执行下一行。
  • 运行应用程序。批处理文件的执行暂停直到应用程序退出秒。
  • 然后服务停止了。
  • 服务停止,子进程终止(带有极端偏见;-)。
  • 听到哔声宣布完成,并且 CMD 提示符显示暂停,以确保一切成功。

这比您的问题更复杂一些,因为其他人可能也会发现该服务和公告很有用。

相关内容