मैं एक Windows सेवा (जो NT_AUTHORITY\SYSTEM
रूप में चलता है) में निम्नलिखित सी # कोड प्रक्रिया निर्माण घटनाओं (WMI और WQL का प्रयोग करके) प्राप्त करने के लिए एक ईवेंट हैंडलर बनाने के लिए उपयोग कर रहा हूँ:प्रक्रिया शुरू घटना WMI का उपयोग करना - नहीं सभी प्रक्रिया का पता लगाया गया जा रहा शुरू होता
string queryString = "SELECT * FROM Win32_ProcessStartTrace";
ManagementEventWatcher watcher = new ManagementEventWatcher(new WqlEventQuery(queryString));
watcher.EventArrived += new EventArrivedEventHandler(ProcessStartEvent);
watcher.Start();
ProcessStartEvent
में:
int processId = int.Parse(e.NewEvent.Properties["ProcessId"].Value.ToString());
Process proc = Process.GetProcessById(processId);
Out("Received process: " + proc.ProcessName);
समस्या मैं आ रही है कि (कुछ अजीब कारण के लिए) नहीं हर प्रक्रिया शुरू सी है उपयुक्त और कार्यक्रम द्वारा रिपोर्ट किया गया। अगर मैं लगभग 6 प्रक्रियाओं को एक साथ शुरू करता हूं, तो कोई आउटपुट में दिखाई नहीं दे सकता है।
मैंने डब्लूएमआई का उपयोग कर प्रक्रिया निर्माण कार्यक्रमों को कैप्चर करने पर कुछ शोध करने की कोशिश की है, लेकिन सीमित जानकारी उपलब्ध है। मैंने देखा है कि यह भी प्रक्रिया के लिए कुछ इसी तरह का उपयोग शुरू कब्जा करने के लिए संभव है:
SELECT TargetInstance
FROM __InstanceCreationEvent
WITHIN 2
WHERE TargetInstance ISA 'Win32_Process'
(this Stack Overflow answer में दिखाई देता है)
वहाँ __InstanceCreationEvent
और Win32_ProcessStartTrace
का उपयोग कर के बीच किसी भी बड़े अंतर है? क्या यह मेरी समस्याओं का कारण हो सकता है?
वहाँ सभी प्रक्रिया शुरू करने के लिए मैं क्यों प्राप्त नहीं हो रहा घटनाओं के लिए के रूप में एक व्याख्या है? क्या कुछ और स्पष्ट है कि मैं यहाँ गलत कर रहा हूं?
[निष्पादन योग्य प्रारंभ प्रक्रिया के लिए .NET घटनाक्रम] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/848618/net-events-for-process-executable-start) –
@ डिमी मैं कहूंगा कि यह काफी है अलग-अलग सवाल, क्योंकि यह इस बात पर केंद्रित है कि क्यों कुछ घटनाएं गायब हो जाती हैं जबकि अन्य प्रक्रियाओं को पकड़ने के लिए अनुमानित "सही" विधि का उपयोग करते समय भी दूसरों को पकड़ा जाता है। – Xenon