Я нашел способ через Аудит, который, похоже, работает нормально. Мы пытаемся заставить процесс вызывать событие при его запуске, а затем в планировщике заданий использовать это событие в качестве триггера для нашего действия.
ОБНОВЛЕНИЕ: Сиамские близнецы — действия приложения в стиле IFTTT с использованием аудита и запланированных задач в Windows а>. Это сценарий Powershell, который поможет вам настроить это.
ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ: ОК, это дает несколько ложных срабатываний. Действие может запускаться без фактического выполнения программы. Так что будьте осторожны.
Перейдите к своему 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 событие. Также есть события A handle was open, A handle was close.
В Планировщике заданий теперь вам нужно создать событие для запуска программы.
Создать новую задачу > Вкладка «Триггеры» > Создать
В раскрывающемся списке выберите Начать задачу: по событию.
Нажмите кнопку-переключатель Пользовательский, а затем кнопку Редактировать фильтр событий....
На вкладке 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 Советы по разработке: как отслеживать папку и запускать действие для входящих файлов в Windows 7
Когда это будет сделано, останется только настроить Действие, программу, которую вы хотите запускать при запуске application.exe
. Для меня это был скрипт AutoHotKey — я просто нажал «Обзор» и перешел к нему.
Теперь, когда я запускаю приложение, я получаю этот скрипт AutoHotKey, автоматизирующий некоторые начальные шаги. Просто создать пакетный файл с application.exe & script.ahk
в нем не получится, потому что иногда приложение запускается с открытия файла, иногда оно запускается чем-то еще, или кто знает. Таким образом, независимо от того, как он запускается, script.ahk происходит.
¹ Примечание: есть одна загвоздка. Этот запрос XPath работает для Data='C:\no\wildcards\allowed.exe'
, но вы будете разочарованы, обнаружив, что вы не может использовать подстановочные знаки или любые другие типы соответствия. Поэтому, если вы хотите выбрать файл, который не перемещается и не меняет имя, это нормально. Но если вы хотите выбрать только что созданный файл с неизвестным именем внутри папки, которую вы просматриваете, вы не сможете. В лучшем случае вы можете сделать Data='variant1' OR Data='variant2'...
person
Leeroy
schedule
29.10.2015