Страницы

Поиск по вопросам

среда, 10 октября 2018 г.

Отследить запуск другого процесса c#

Можно ли как-то отследить запуск другого процесса(cmd.exe) средствами C#? Может быть есть какие-то библиотеки для работы с системными событиями?


Ответ

Так как вопрос для которого я написал данный ответ оказался "дубликатом", выкладываю решение здесь, тем более просили решение на C#, а принятый ответ на VB.
using System; using System.Management; // =>Project => Add Reference => System.Managemen
namespace ProcessMonitor { class Program { static void Main(string[] args) { ManagementEventWatcher startWatch = new ManagementEventWatcher( new WqlEventQuery("SELECT * FROM Win32_ProcessStartTrace")); startWatch.EventArrived += startWatch_EventArrived; startWatch.Start(); ManagementEventWatcher stopWatch = new ManagementEventWatcher( new WqlEventQuery("SELECT * FROM Win32_ProcessStopTrace")); stopWatch.EventArrived += stopWatch_EventArrived; stopWatch.Start(); Console.WriteLine("Press ENTER to exit"); Console.ReadLine(); startWatch.Stop(); stopWatch.Stop(); }
static void stopWatch_EventArrived(object sender, EventArrivedEventArgs e) { Console.WriteLine("Process stopped: {0}", e.NewEvent.Properties["ProcessName"].Value); }
static void startWatch_EventArrived(object sender, EventArrivedEventArgs e) { Console.WriteLine("Process started: {0}", e.NewEvent.Properties["ProcessName"].Value); } } }
Для отслеживания конкретного процесса можно записать так:
ManagementEventWatcher startWatch = new ManagementEventWatcher( new WqlEventQuery("SELECT * FROM Win32_ProcessStartTrace WHERE ProcessName = \"notepad.exe\""));
Важно! Использование ManagementEventWatcher требует привилегий администратора.
Возможные параметры которые можно использовать в представленном WQL запросе можно посмотреть тут.

Комментариев нет:

Отправить комментарий