web-dev-qa-db-fra.com

Comment puis-je vérifier si un service Windows est en cours d'exécution

J'ai une application en C # (2.0 fonctionnant sur XP incorporé) qui communique avec un "chien de garde" implémenté en tant que service Windows. Lorsque le périphérique démarre, ce service prend généralement un certain temps à Je voudrais vérifier, à partir de mon code, si le service est en cours d'exécution. Comment puis-je accomplir cela?

167
edosoft

Je suppose que quelque chose comme ceci fonctionnerait:

Ajoutez System.ServiceProcess Aux références de votre projet (c'est sur l'onglet .NET).

using System.ServiceProcess;

ServiceController sc = new ServiceController(SERVICENAME);

switch (sc.Status)
{
    case ServiceControllerStatus.Running:
        return "Running";
    case ServiceControllerStatus.Stopped:
        return "Stopped";
    case ServiceControllerStatus.Paused:
        return "Paused";
    case ServiceControllerStatus.StopPending:
        return "Stopping";
    case ServiceControllerStatus.StartPending:
        return "Starting";
    default:
        return "Status Changing";
}

Edit: Il existe également une méthode sc.WaitforStatus() qui prend un statut souhaité et un délai d’attente. Elle ne l’a jamais utilisée, mais elle peut répondre à vos besoins.

Edit: Une fois que vous avez obtenu le statut, vous devez d'abord appeler sc.Refresh() pour le récupérer.

Référence: ServiceController objet dans .NET.

334
Carl

Veuillez consulter l'objet ServiceController dans .NET.

20
Larry

Ici, vous obtenez tous les services disponibles et leur statut sur votre ordinateur local.

ServiceController[] services = ServiceController.GetServices();
foreach(ServiceController service in services)
{
    Console.WriteLine(service.ServiceName+"=="+ service.Status);
}

Vous pouvez comparer votre service avec la propriété service.name à l'intérieur de la boucle et obtenir le statut de votre service. Pour plus de détails, consultez le fichier http://msdn.Microsoft.com/en-us/library/system.serviceprocess.servicecontroller.aspxhttp://msdn.Microsoft.com/en-us/library/Microsoft.windows.design.servicemanager (v = vs.90) .aspx

12
rhatwar007