Обратный вызов С# для нового процесса создан?

Я хочу, чтобы мой callbackMethod() запускался всякий раз, когда создается определенный новый внешний процесс.

Я смотрел на API WMI, я в какой-то степени читал, что могу прикрепить обработчик событий всякий раз, когда процесс запускается.

Я просмотрел этот ответ: Есть ли системное событие, когда процессы созданы? И создал этот код:

public static void setupMonitor()
{
    ManagementEventWatcher startWatch = new ManagementEventWatcher(new 
          WqlEventQuery("SELECT * FROM Win32_ProcessStartTrace"));
    startWatch.EventArrived += new EventArrivedEventHandler(callBack);
    startWatch.Start();
}

public static void callBack(object sender, EventArrivedEventArgs e)
{
    int id = Convert.ToInt32(e.NewEvent.Properties["ProcessID"].Value);        
    Process started = Process.GetProcessById(id);
}

Как я могу получить новый процесс и назначить его объекту С# Process?

Я хочу знать, отправляет ли этот метод событие, если процесс создан как «приостановленный»?

Или мне нужно использовать другой запрос

Всем спасибо


person Zeller33    schedule 21.01.2017    source источник
comment
seen the windows API - Win32_ProcessStartTrace - это не WinAPI, это класс WMI. would importing Win32_ProcessStartTrace directly be more efficient - вы уже используете его, что вы подразумеваете под importing? Кроме того, вы взглянули на заголовок stackoverflow.com/questions/22131316/   -  person Eugene Podskal    schedule 21.01.2017
comment
Вы можете получить имя процесса из этого события и запустить Process.Start   -  person Akash KC    schedule 21.01.2017
comment
@ Zeller33 Zeller33 Кроме того, вы задаете слишком много вопросов в одном. Вы должны концентрироваться на чем-то одном, иначе вопрос потеряет фокус и станет слишком широким.   -  person Eugene Podskal    schedule 21.01.2017
comment
Извините, я удалил первый вопрос, возможно, он был неясен. Последние два являются важными, и @LolCoder, я не хочу запускать новый экземпляр процесса   -  person Zeller33    schedule 21.01.2017
comment
Извините, люди, я ответил на часть своего вопроса, но у меня есть один важный вопрос   -  person Zeller33    schedule 21.01.2017
comment
What I want to know is does this method also send an event if a process created as 'suspended'? - похоже, что на этот счет нет документации. Вам, вероятно, придется создать приостановленный процесс и проверить, обнаружен он или нет. Очевидно, что существует риск того, что даже если он работает на одной версии ОС, он может не работать на более старой или новой версии, но если предположить, что это не критическое для системы приложение и что запущено очень мало процессов, это может не быть проблемой.   -  person Eugene Podskal    schedule 22.01.2017
comment
@Eugene -› да, он активирует обратный вызов для «приостановленного» процесса, но я обнаружил, что Process.GetProcessById(id) не работает при приостановке??? Или я что-то не так делаю   -  person Zeller33    schedule 22.01.2017
comment
@ Zeller33 Как именно это не работает?   -  person Eugene Podskal    schedule 22.01.2017