Могу ли я получить уведомление при запуске какого-либо процесса? - PullRequest
4 голосов
/ 16 декабря 2009

Мне нужно знать (желательно с наименьшей задержкой), когда запускается foo.exe.

Прямо сейчас у меня есть нить, которая находится в легкой петле (~ 10 Гц) и обходит дерево процессов, выглядя foo.exe.

Это не так элегантно, и мне было интересно, могу ли я зарегистрироваться в какой-то части Windows API, чтобы получить обратный вызов при запуске любого процесса.

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

Ответы [ 2 ]

4 голосов
/ 16 декабря 2009

Вы можете зарегистрироваться в качестве отладчика для foo.exe через Параметры выполнения файла образа . В любое время, когда система должна запустить foo.exe, она запустит ваше приложение и передаст вам foo.exe и его параметры. Вам придется начать процесс самостоятельно.

Примечание: как обычно, некоторые предостерегающие слова Раймонда Чена.

Вы также можете установить перехват сообщений для всей системы , и для каждого нового процесса, который загружает ваша dll, проверьте, является ли тот, который вам нужен, через который вы только что проходили, для foo.exe вы уведомляете себя, а затем пройти через. К сожалению, это означает, что вы будете внедрять свой код в каждый процесс, и вы будете немного вредить работе системы. Не говоря уже о том, что вы можете на самом деле всех напутать, если в вашем коде есть ошибка.

0 голосов
/ 16 декабря 2009

Возможные варианты:

foo.exe находится под вашим контролем? Если это так, измените исходный код для отправки сигнала.

foo.exe не находится под вашим контролем? Напишите DLL-файл для инъекций и пусть он отправит сигнал при загрузке в процесс с правильным именем.

...