FreeTime - Stefano Passatordi 's Blog


Libera la mente...ecco il Blog di Stefano Passatordi
Statistiche
  • Views Home Page: 156.848
  • Views Posts: 374.282
  • Views Gallerie: 752.216
  • n° Posts: 210
  • n° Commenti: 148
Archivio Posts
Anno 2010

Anno 2009

Anno 2008

Anno 2007

Anno 2006

Anno 2005
Mappa

Monitorare l'attività di un processo

Per monitorare un processo (avvio/chiusura) è possibile utilizzare WMI di Windows. Per questo è necessario importare il namespace System.Management.

Il seguente esempio è in C#.

using System.Management;

//Metodo per avviare il monitoring dell'evento START (avvio del processo).
//Il parametro name è il nome dell'eseguibile compreso di estensione da monitorare, es: skype.exe
public void StartMonitoring(string name)
{

WqlEventQuery query;
ManagementEventWatcher watcher;
ManagementBaseObject eventObj;

try
{
//Query per monitorare l'evento START
query = new WqlEventQuery("SELECT * FROM Win32_ProcessStartTrace WHERE ProcessName= '" + name + "'");

//Viene istanziato l'oggetto ManagementEventWatcher passandogli la query che ci interessa
watcher = new ManagementEventWatcher(query);

while (true)
{
//Con il metodo asincrono WaitForNextEvent() mettiamo in ascolto il ManagementEventWatcher che restituisce un ManagementBaseObject quando intercetta l'evento della query.
eventObj = watcher.WaitForNextEvent();
System.Windows.Forms.MessageBox.Show(name + " STARTED.");
}

// Dopo aver avvisato che l'evento si è verificato è possibile bloccare l'ascolto dell'evento START.
watcher.Stop();
return;
}
catch (ManagementException err)
{
System.Diagnostics.Debug.Write(err.Message);
}
}


//Metodo per avviare il monitoring dell'evento STOP (chiusura del processo).
//Il parametro name è il nome dell'eseguibile compreso di estensione da monitorare, es: skype.exe
public void StopMonitoring(string name)
{

WqlEventQuery query;
ManagementEventWatcher watcher;
ManagementBaseObject eventObj;

try
{
//Come sopra con la differenza che l'evento ora è STOP.
query = new WqlEventQuery("SELECT * FROM Win32_ProcessStopTrace WHERE ProcessName= '" + name + "'");

watcher= new ManagementEventWatcher(query);

while (true)
{
eventObj = watcher.WaitForNextEvent();
System.Windows.Forms.MessageBox.Show(name + " STOPPED.");
}


watcher.Stop();
return;
}
catch (ManagementException err)
{
System.Diagnostics.Debug.Write(err.Message);
}
}

Per essere avvisati quando un processo viene avviato e stoppato bisogna semplicemente richiamare i due metodi, esempio skype.exe :

StartMonitoring("skype.exe");
StopMonitoring("skype.exe");

In questo modo potremo leggere un messaggio quando skype viene avviato e quando viene chiuso.
Categoria: Programmazione
mercoledì, 02 ago 2006 Ore. 20.10
Ora e Data
Calendario
novembre 2024
lmmgvsd
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678
Blogs Amici
    Links
      Copyright © 2002-2007 - Blogs 2.0
      dotNetHell.it | Home Page Blogs
      ASP.NET 2.0 Windows 2003