2015-10-29 4 views
3

Я пытаюсь связать два приложения вместе, так что, когда один запускается, запускается и другое.Запланировать задачу для мониторинга запуска определенного процесса

Я ожидал найти это в Планировщике задач в разделе События> Приложение или что-то в этом роде, но только в некоторых приложениях есть источники событий.

Итак, я исследовал и обнаружил, что вы можете обнаружить начало процесса, зарегистрировав событие 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? Без опроса или запуска скрипта в фоновом режиме, а просто для планирования задачи, чтобы ответить на событие «Блокнот», начав?

ответ

3

Я нашел способ через Аудит, который, похоже, работает нормально. Мы пытаемся заставить процесс поднять событие при его запуске, а затем в планировщике заданий на дом в этом событии в качестве триггера для нашего действия.

LATER EDIT: ОК, это действительно создает несколько ложных срабатываний. Действие может срабатывать без выполнения фактически выполненной программы. Поэтому будьте осторожны, работа продолжается.

Перейти к вашему application.exe, щелкните правой кнопкой> вкладка Свойства> Безопасность> Достижения> вкладка аудита> Изменить

Добавить свое имя пользователя и отметьте папку Traverse/выполнение файла. Нажмите все ОК. Каждое успешное выполнение 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 событие. Есть Ручка была открыта, ручка была закрыта событий.
В Планировщик заданий вы должны создать событие, предназначенное для запуска программы.

Создать новую задачу> Триггеры Tab> Новые

Выберите Начало задачи: На событии из раскрывающегося списка.

Нажмите Пользовательский радиокнопка затем Редактировать фильтр ...Кнопка

В 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> 

¹
Картины и больше деталей в Quick Development Tips: How to monitor a folder and trigger an action for incoming files, in Windows 7

Как только это будет сделано, все, что осталось - это настроить Действие, программу, которую вы хотите запустить, когда начинается application.exe , Для меня это был скрипт AutoHotKey - я просто нажал кнопку «Обзор» и перешел к нему.

Теперь, когда я запускаю приложение, я получаю скрипт AutoHotKey, автоматизирующий некоторые начальные шаги. Это не сработало бы для создания командного файла с application.exe & script.ahk, потому что иногда приложение начинает с открытия файла, иногда его запускает что-то другое или кто знает. Таким образом, независимо от того, как он начинается, происходит сценарий.

¹ Сторона примечания: Вот улов. Этот запрос XPath работает для Data='C:\no\wildcards\allowed.exe', но вы будете разочарованы, обнаружив, что вы can't use wildcards or any other kind of matching. Поэтому, если вы хотите выбрать файл, который не перемещает или не меняет имя, это нормально. Но если вы хотите выбрать вновь созданный файл неизвестного имени внутри папки, которую вы смотрите, вы не можете. В лучшем случае вы можете сделать Data='variant1' OR Data='variant2'...