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?
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.
Veuillez consulter l'objet 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 à 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