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?
Réponses
Trop de publicités?Je suppose que quelque chose de ce genre:
Ajouter Un Système.ServiceProcess à votre projet références (Il est sur le .NET onglet).
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 désiré et un délai d'attente, n'a jamais été utilisé, mais il peut s'adapter à vos besoins.
Edit: une Fois que vous obtenez le statut, pour obtenir le statut de nouveau, vous aurez besoin de faire appel sc.Refresh()
première.
Référence: ServiceController objet .NET.
Veuillez regarder l'objet ServiceController dans .NET.
Ici, vous obtenez Tous les services Disponibles et il y a dans votre machine locale.
ServiceController[] services = ServiceController.GetServices();
foreach(ServiceController service in services)
{
Console.WriteLine(service.ServiceName+"=="+ service.Status);
}
Vous pouvez Comparer votre service avec le service.nom de la propriété à l'intérieur de la boucle et vous obtenez le statut de votre service. Pour plus de détails aller avec le http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicecontroller.aspx aussi http://msdn.microsoft.com/en-us/library/microsoft.windows.design.servicemanager(v=vs. 90).aspx