Tôi đang sử dụng mã C# sau đây trong Dịch vụ Windows (chạy như NT_AUTHORITY\SYSTEM
) để tạo trình xử lý sự kiện để nhận sự kiện tạo quy trình (sử dụng WMI và WQL):Xử lý sự kiện bắt đầu bằng cách sử dụng WMI - Không phải tất cả quy trình bắt đầu được phát hiện
string queryString = "SELECT * FROM Win32_ProcessStartTrace";
ManagementEventWatcher watcher = new ManagementEventWatcher(new WqlEventQuery(queryString));
watcher.EventArrived += new EventArrivedEventHandler(ProcessStartEvent);
watcher.Start();
Trong ProcessStartEvent
:
int processId = int.Parse(e.NewEvent.Properties["ProcessId"].Value.ToString());
Process proc = Process.GetProcessById(processId);
Out("Received process: " + proc.ProcessName);
vấn đề tôi đang gặp là (vì một lý do lạ) không phải mọi quá trình bắt đầu là c đã yêu cầu và được báo cáo bởi chương trình. Nếu tôi bắt đầu khoảng 6 quá trình cùng một lúc, người ta có thể không hiển thị trong đầu ra.
Tôi đã cố gắng thực hiện một số nghiên cứu về ghi lại các sự kiện tạo quy trình bằng WMI, nhưng có sẵn thông tin giới hạn. Tôi đã nhìn thấy rằng nó cũng có thể nắm bắt được quá trình bắt đầu sử dụng một cái gì đó tương tự như:
SELECT TargetInstance
FROM __InstanceCreationEvent
WITHIN 2
WHERE TargetInstance ISA 'Win32_Process'
(Như đã thấy trong this Stack Overflow answer)
Có bất kỳ sự khác biệt lớn giữa việc sử dụng __InstanceCreationEvent
và Win32_ProcessStartTrace
? Đây có phải là nguyên nhân của vấn đề của tôi không?
Có giải thích lý do tại sao tôi không nhận được sự kiện cho tất cả bắt đầu quá trình? Có điều gì rõ ràng hơn là tôi đang làm sai ở đây không?
Bản sao có thể có của [Sự kiện .NET cho quá trình thực thi quy trình] (http://stackoverflow.com/questions/848618/net-events-for-process-executable-start) –
@Dimi Tôi có thể nói đây là một câu hỏi khác, vì điều này tập trung vào lý do tại sao một số sự kiện dường như biến mất trong khi những sự kiện khác bị bắt ngay cả khi sử dụng phương pháp được cho là "chính xác" để bắt các sự kiện bắt đầu quy trình. – Xenon