Можно ли как-то отследить запуск другого процесса(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 запросе можно посмотреть тут.
Комментариев нет:
Отправить комментарий