2009-05-09 4 views

Répondre

21

Pour utiliser la méthode ServiceController je vérifierais la solution avec usurpation d'identité mis en œuvre dans cette question précédente: .Net 2.0 ServiceController.GetServices()

FWIW, voici C#/chemin WMI avec l'hôte explicite, nom d'utilisateur, mot de passe:

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)); 
    } 
} 
+0

Merci. Toutes les réponses m'ont aidé à me diriger vers WMI et System.Management. J'ai aimé la requête et j'ai utilisé cet extrait. thx à nouveau. -k2 – kkelly18

+0

@AK_ Pourquoi avez-vous annulé ma modification? – Dan

+0

@Dan désolé, j'ai roulé dans le mauvais onglet ... réparé ... –

5

Vous pouvez utiliser wmi pour cela (System.Management). Vous pouvez également utiliser ServiceController.GetServices().

34

ServiceController.GetServices ("nom_machine") renvoie un tableau d'objets ServiceController pour une machine particulière.

Ce:

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(); 
     } 
    } 
} 

produit:

Le service d'expérience de l'application est en cours d'exécution .

Le service de service de filtres Andrea ST est en cours d'exécution.

Le service Application Layer Gateway Service est actuellement arrêté. Le service d'information d'application est actuellement en cours d'exécution.

etc ...

Bien sûr, j'utilisé la version parameterless pour obtenir les services sur ma machine.

3

Cela vérifiera le nom du service de votre système avec votre nom de service souhaité que vous pouvez mentionner le paramètre

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; 
    } 
} 
} 
Questions connexes