2009-10-15 8 views
10

यह मेरी पहली पोस्ट है, इसलिए मुझे हेल्लो कहकर शुरू करें!WindowsCDostostics.Process को कैसे सेट करें ServiceController

मैं एक ही सर्वर पर कई अन्य विंडोज सेवाओं की चलती स्थिति की निगरानी करने के लिए एक विंडोज सेवा लिख ​​रहा हूं। मैं सेवाओं के कुछ स्मृति आंकड़ों को मुद्रित करने के लिए एप्लिकेशन को विस्तारित करना चाहता हूं, लेकिन मुझे किसी विशेष सेवा नियंत्रक ऑब्जेक्ट से अपने संबंधित डायग्नोस्टिक्स में मानचित्र करने का तरीका समझने में परेशानी हो रही है। प्रोसेस ऑब्जेक्ट, जो मुझे लगता है कि मुझे इसकी आवश्यकता है स्मृति स्थिति निर्धारित करें।

मुझे पता चला कि सर्विस कंट्रोलर से मूल छवि नाम में कैसे मानचित्र करना है, लेकिन मैं जिन सेवाओं की निगरानी कर रहा हूं, वे एक ही छवि से शुरू हो गए हैं, इसलिए यह प्रक्रिया निर्धारित करने के लिए पर्याप्त नहीं होगा।

क्या कोई जानता है कि किसी दिए गए सेवा नियंत्रक से प्रक्रिया ऑब्जेक्ट कैसे प्राप्त करें? शायद एक सेवा के पीआईडी ​​का निर्धारण करके? या फिर किसी और के पास इस समस्या के लिए एक और कामकाज है?

बहुत धन्यवाद, एलेक्स

उत्तर

22

System.Management इस मामले में आप के लिए काम करना चाहिए। शुरू करने के लिए यहां एक नमूना दिया गया है:

using System; 
using System.Diagnostics; 
using System.ServiceProcess; 
using System.Management; 
class Program 
{ 
    static void Main(string[] args) 
    { 
     foreach (ServiceController scTemp in ServiceController.GetServices()) 
     { 
      if (scTemp.Status == ServiceControllerStatus.Stopped) 
       continue; // stopped, so no process ID! 

      ManagementObject service = new ManagementObject(@"Win32_service.Name='" + scTemp.ServiceName + "'"); 
      object o = service.GetPropertyValue("ProcessId"); 
      int processId = (int) ((UInt32) o); 
      Process process = Process.GetProcessById(processId); 
      Console.WriteLine("Service: {0}, Process ID: {1}", scTemp.ServiceName, processId); 
     } 
    } 
}