189 votes

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?

377voto

Carl Points 2236

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.

20voto

Larry Points 6257

Veuillez regarder l'objet ServiceController dans .NET.

16voto

rhatwar007 Points 13

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X