2009-03-16 12 views
12

Jak wykryć za pomocą C# w systemie Windows moment uruchomienia zewnętrznej aplikacji?Wykrywanie uruchomienia aplikacji

Próbowałem FilesystemWatcher, który nie działa, ponieważ plik tak naprawdę się nie zmienia. Również posiadanie zegara ciągle sprawdza wszystkie otwarte procesy może być nieco ponad zabijaniem. Czy jest jakiś inny sposób na zrobienie tego? Jeśli nie w C# jest to możliwe w C++ (jeśli tak, proszę podać przykład).

Powodem, dla którego chcę to zrobić, jest rejestracja.

Odpowiedz

20

Można użyć System.Management i WMI (Windows Management Instrumentation)

class WMIEvent { 
    public static void Main() { 
     WMIEvent we = new WMIEvent(); 
     ManagementEventWatcher w= null; 
     WqlEventQuery q; 
     try { 
      q = new WqlEventQuery(); 
      q.EventClassName = "Win32_ProcessStartTrace"; 
      w = new ManagementEventWatcher(q); 
      w.EventArrived += new EventArrivedEventHandler(we.ProcessStartEventArrived); 
      w.Start(); 
      Console.ReadLine(); // block main thread for test purposes 
     } 
     finally { 
      w.Stop(); 
     } 
} 

    public void ProcessStartEventArrived(object sender, EventArrivedEventArgs e) {  
     foreach(PropertyData pd in e.NewEvent.Properties) { 
      Console.WriteLine("\n============================= ========="); 
      Console.WriteLine("{0},{1},{2}",pd.Name, pd.Type, pd.Value); 
     } 
    } 
+0

@stalkerh jaki sposób dokonać tej pracy? Różne typy, takie jak MangementEventWatcher, nie istnieją w System.Management lub System.Mangement.Instrumentation. Gdzie je znajdę? Przegapiłem coś? – Svish

+0

Nieważne. Musiał również dodać odniesienie do dll System.Management. Nie dodawaj 'using System.Management;' ... * westchnienie *: p – Svish

+0

Ale 'w = new ProcessStartEventArrived (q);' nadal nie działa ... – Svish

Powiązane problemy