2009-05-09 8 views
22

मैं रिमोट मशीन पर एक विशिष्ट उपयोगकर्ता के रूप में चल रही सेवाओं की एक सूची के लिए पूछना चाहता हूं और फिर प्रत्येक के स्वास्थ्य की जांच करता हूं। मैं एक कस्टम कंसोल बना रहा हूँ।सी # में मैं विंडोज सर्वर पर चल रही सेवाओं की सूची कैसे पूछूं?

उत्तर

21

ServiceController विधि मैं इस पिछले प्रश्न में लागू प्रतिरूपण के साथ समाधान की जाँच चाहते हैं का उपयोग करें:

using System.Management; 

static void EnumServices(string host, string username, string password) 
{ 
    string ns = @"root\cimv2"; 
    string query = "select * from Win32_Service"; 

    ConnectionOptions options = new ConnectionOptions(); 
    if (!string.IsNullOrEmpty(username)) 
    { 
     options.Username = username; 
     options.Password = password; 
    } 

    ManagementScope scope = 
     new ManagementScope(string.Format(@"\\{0}\{1}", host, ns), options); 
    scope.Connect(); 

    ManagementObjectSearcher searcher = 
     new ManagementObjectSearcher(scope, new ObjectQuery(query)); 
    ManagementObjectCollection retObjectCollection = searcher.Get(); 
    foreach (ManagementObject mo in retObjectCollection) 
    { 
     Console.WriteLine(mo.GetText(TextFormat.Mof)); 
    } 
} 
: .Net 2.0 ServiceController.GetServices()

Fwiw, यहाँ स्पष्ट मेजबान, उपयोगकर्ता नाम, पासवर्ड के साथ सी #/WMI रास्ता है

+0

पर उल्लेख कर सकते हैं धन्यवाद। सभी उत्तरों ने मुझे डब्लूएमआई और सिस्टम को इंगित करने में मदद की। प्रबंधन। मुझे क्वेरी पसंद आई और इस स्निपेट का इस्तेमाल किया। फिर से thx। -k2 – kkelly18

+0

@AK_ आपने मेरे संपादन को रोलबैक क्यों किया? – Dan

+0

@ डॉन क्षमा करें, मैं गलत टैब में वापस लुढ़का ... इसे ठीक कर दिया ... –

5

आप इस (सिस्टम.मैनेजमेंट) के लिए wmi का उपयोग कर सकते हैं। आप ServiceController.GetServices() का भी उपयोग कर सकते हैं।

34

ServiceController.GetServices ("machineName") किसी विशेष मशीन के लिए ServiceController ऑब्जेक्ट्स की एक सरणी देता है।

यह:

namespace AtYourService 
{ 
    using System; 
    using System.ServiceProcess; 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      ServiceController[] services = ServiceController.GetServices(); 

      foreach (ServiceController service in services) 
      { 
       Console.WriteLine(
        "The {0} service is currently {1}.", 
        service.DisplayName, 
        service.Status); 
      } 

      Console.Read(); 
     } 
    } 
} 

पैदा करता है:

आवेदन अनुभव सेवा अभी चल रहा है।

एंड्रिया एसटी फ़िल्टर सेवा सेवा वर्तमान में चल रहा है।

एप्लिकेशन लेयर गेटवे सेवा सेवा वर्तमान में बंद हो गई है।

आवेदन सूचना सेवा वर्तमान में चल रही है।

आदि ...

बेशक

, मैं अपने मशीन पर सेवाएं मिल parameterless संस्करण का उपयोग किया।

3

यह अपनी इच्छित सेवा नाम के साथ आप प्रणाली की सेवा नाम की जाँच करेगा जो आप पैरामीटर

namespace ServiceName 
{ 
using System; 
using System.ServiceProcess; 

class Service 
{ 

public static bool IsServiceInstalled(string serviceName) 
{ 

ServiceController[] services = ServiceController.GetServices(); 

foreach (ServiceController service in services) 
{ 
    if (service.ServiceName == serviceName) 
    return true; 
} 
return false; 
    } 
} 
} 
संबंधित मुद्दे