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

J’ai une application en C # (2.0 exécutée sous XP) 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 pour démarrer. Je voudrais vérifier, à partir de mon code, si le service est en cours d’exécution. Comment puis-je accomplir cela?

Je suppose que quelque chose comme ça fonctionnerait:

Ajoutez System.ServiceProcess à vos références de projet (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 y a aussi une méthode sc.WaitforStatus() qui prend un statut et un délai d’expiration, ne l’a jamais utilisé mais peut convenir à vos besoins.

Edit: Une fois que vous obtenez le statut, pour obtenir le statut à nouveau, vous devrez d’abord appeler sc.Refresh() .

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

Veuillez regarder l’object ServiceController dans .NET.

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 dans la boucle et vous obtenez le statut de votre service. Pour plus de détails, consultez le http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicecontroller.aspx ainsi que http://msdn.microsoft.com/en-us/library/microsoft.windows.design .servicemanager (v = vs.90) .aspx