2009-03-16 27 views
12

Làm cách nào để phát hiện bằng C# trên Windows vào thời điểm khi một ứng dụng bên ngoài được khởi chạy?Phát hiện sự ra mắt của một ứng dụng

Tôi đã thử FilesystemWatcher không hoạt động vì tệp không thực sự thay đổi. Ngoài ra có một bộ đếm thời gian liên tục kiểm tra tất cả các quá trình mở có thể là một chút hơn giết. Có cách nào khác để làm điều này? Nếu không có trong C# là nó có thể làm như vậy trong C + + (nếu vậy xin vui lòng cho tôi một ví dụ).

Lý do tôi muốn làm điều này là dành cho mục đích ghi nhật ký.

Trả lời

20

Bạn có thể sử dụng System.ManagementWMI (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 Làm thế nào mà bạn thực hiện công việc này? Các loại khác nhau, như MangementEventWatcher, không tồn tại trong System.Management hoặc System.Mangement.Instrumentation. Tôi tìm thấy chúng ở đâu? Tôi đã bỏ lỡ một cái gì đó? – Svish

+0

Nevermind. Đã phải thêm một tham chiếu đến System.Management dll là tốt. Không chỉ thêm 'using System.Management;' ... * sigh *: p – Svish

+0

Nhưng 'w = new ProcessStartEventArrived (q);' vẫn không hoạt động ... – Svish

Các vấn đề liên quan