2009-03-16 28 views
12

मैं उस समय विंडोज़ पर सी # के साथ कैसे पता लगा सकता हूं जब बाहरी एप्लिकेशन लॉन्च किया जा रहा है?किसी एप्लिकेशन के लॉन्च का पता लगाने

मैंने फाइलसिस्टम वाटर का प्रयास किया जो काम नहीं करता है क्योंकि फ़ाइल वास्तव में बदल नहीं रही है। इसके अलावा एक टाइमर लगातार जांचें कि सभी खुली प्रक्रियाओं को मारने पर थोड़ा सा हो सकता है। ऐसा करने के लिए कोई और रास्ता नहीं है? यदि सी # में नहीं है तो सी ++ में ऐसा करना संभव है (यदि ऐसा है तो कृपया मुझे एक उदाहरण दें)।

कारण मैं लॉगिंग उद्देश्यों के लिए करना चाहता हूं।

उत्तर

20

आप System.Management और 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 कैसे आप इस काम किया जा सकता है? MangementEventWatcher जैसे विभिन्न प्रकार, सिस्टम में मौजूद नहीं हैं। प्रबंधन या सिस्टम। मैनेजमेंट। इंस्ट्रुमेंटेशन। मैं उन्हें कहां प्राप्त कर सकता हूं? क्या मैं कुछ भुल गया? – Svish

+0

कभी नहीं। सिस्टम के लिए एक संदर्भ जोड़ना पड़ा। प्रबंधन डीएल भी। न केवल 'सिस्टम का उपयोग करें। प्रबंधन;' ... * sigh *: p – Svish

+0

लेकिन 'w = new ProcessStartEventArrived (q); 'अभी भी काम नहीं करता है ... – Svish

संबंधित मुद्दे