Cách đơn giản nhất là sử dụng WMI. Cụ thể theo dõi Win32_ProcessStartTrace. Điều này là tốt hơn so với Win32_Process, bởi vì nó được thiết lập để sử dụng các sự kiện trong khi Win32_Process yêu cầu bỏ phiếu mà là nhiều CPU chuyên sâu. Dưới đây là cách thực hiện trong C#. Trước tiên, hãy đảm bảo rằng System.Management được thiết lập làm tham chiếu cho dự án của bạn.
public System.Management.ManagementEventWatcher mgmtWtch;
public Form1()
{
InitializeComponent();
mgmtWtch = new System.Management.ManagementEventWatcher("Select * From Win32_ProcessStartTrace");
mgmtWtch.EventArrived += new System.Management.EventArrivedEventHandler(mgmtWtch_EventArrived);
mgmtWtch.Start();
}
void mgmtWtch_EventArrived(object sender, System.Management.EventArrivedEventArgs e)
{
MessageBox.Show((string)e.NewEvent["ProcessName"]);
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
mgmtWtch.Stop();
}
Mã sẽ tạo hộp thư mỗi lần bạn khởi chạy quy trình mới. Từ đó bạn có thể kiểm tra danh sách trắng/danh sách cấm và hành động phù hợp.
Nguồn
2009-02-15 04:04:43
Thật không may WMI dường như gửi thông báo đến 5 giây sau khi quá trình được tạo. Không hữu ích cho các thông báo thời gian thực hoặc làm bất cứ điều gì với các tác vụ ngắn ngủi. –
Tôi đã tìm thấy một ví dụ trên trang web của Microsoft cho cùng một tác vụ [ở đây] (http://msdn.microsoft.com/en-us/library/system.management.managementeventwatcher.waitfornextevent.aspx?cs-save-lang=1&cs- lang = csharp # code-snippet-1), nhưng nó có cùng một vấn đề. –
Gah ... bằng cách sử dụng WMI có nhiều CPU hơn việc bỏ phiếu danh sách quy trình thủ công (nó chỉ xảy ra trong quy trình dịch vụ WMI thay vì quy trình của bạn). Hơn nữa, nếu ứng dụng của bạn gặp sự cố, đăng ký sẽ tiếp tục chạy trong dịch vụ WMI, hút CPU ... –