安排任务以监视某个进程启动

我试图把两个应用程序绑在一起,这样当一个应用程序启动时,另一个应用程序也会启动。

我期望在“事件”>“应用程序”下面的“任务计划程序”中find它,但是只有一些应用程序具有事件源。

所以我研究并发现,你可以通过注册一个WMI事件来检测一个进程的开始。

Register-WMIEvent -Query "SELECT * FROM __InstanceCreationEvent WITHIN 3 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name = 'notepad.exe'" -sourceIdentifier 'NotepadStarted' -action {if(!(ps AutoHotKey)) { start Automator.ahk}} 

然而,这意味着运行所有的时间,这意味着后台powershell.exe进程,WMI轮询每3秒( WITHIN 3 – 是的,我确实需要它尽快回应)。 个人电脑对于这项工作是足够强大的,但是如果将来我想观看多个应用程序,这种方法可能会使用太多的资源。

有没有更好的方式来观察Windows上的进程启动? 没有在后台连续轮询或运行脚本,而只是简单地安排一个任务,以响应已启动的记事本事件?

我已经找到了审计的方式,这似乎工作正常。 我们试图让流程在启动时引发一个事件,然后在任务计划程序中将该事件作为我们操作的触发器。

后来编辑:它确实产生了一些误报。 该操作可能在没有实际执行程序的情况下触发。 所以要小心,工作正在进行中。

转到您的application.exe ,右键单击>属性>安全选项卡>进展>审核选项卡>编辑

添加您的用户名并勾选遍历文件夹/执行文件 。 点击所有的确定。 现在,每个成功执行的application.exe都将显示在事件查看器中。 去那里检查出来:

事件查看器> Windows日志>安全性您可以过滤EventID 4663的当前日志

这里是我的机器中的一个事件:

试图访问一个对象。

 Subject: Security ID: PC\Redacted Account Name: Redacted Account Domain: PC Logon ID: 0xxxxxxx Object: Object server: Security Object Type: File Object Name: C:\Program Files\Some Application\application.exe Handle ID: 0x1e1c Process Information: Process ID: 0x374 Process Name: C:\Windows\explorer.exe Access Request Information: Accesses: Execute/Traverse Access Mask: 0x20 

你会看到不止一个,这不仅仅是一对一,1个节目开始= 1个事件。 有一个句柄是开放的,一个句柄也是关闭的事件。
任务计划程序中,您现在必须创建一个事件来定位程序启动。

创建新任务>触发器选项卡>新建

选择开始任务:从下拉菜单中选择一个事件

点击自定义单选按钮,然后点击编辑事件过滤…按钮

在“ XML”选项卡中,勾选“ 手动编辑查询”并粘贴如下所示的内容:

 <QueryList> <Query Id="0" Path="Security"> <Select Path="Security">*[EventData[Data[@Name='ObjectName'] and (Data='C:\Program Files\Some Application\application.exe')]] </Select> </Query> </QueryList> 

¹
快速开发技巧中的图片和更多细节:在Windows 7中如何监控文件夹并触发传入文件的操作

一旦完成,剩下的就是设置你的Action ,你想在application.exe启动时运行的application.exe 。 对我来说,这是一个AutoHotKey脚本 – 我只是点击浏览并导航到它。

现在,当我启动应用程序,我得到了AutoHotKey脚本自动化的一些初始步骤。 它不会创建一个带有application.exe & script.ahk的批处理文件,因为有时应用程序从打开文件开始,有时候是由其他的东西启动,或者是谁知道的。 这样,无论如何,script.ahk都会发生。

¹旁注:这是一个捕获。 这个XPath查询适用于Data='C:\no\wildcards\allowed.exe'但您会失望地发现您不能使用通配符或任何其他类型的匹配 。 所以如果你想选择一个不移动或改变名称的文件,那很好。 但是如果你想在你正在看的文件夹中选择一个新创建的未知名称的文件 – 你不能。 最多可以做Data='variant1' OR Data='variant2'...