2010-02-24 11 views
5

J'ai besoin de vérifier si mon service de fenêtre fonctionne ou pas toutes les 15 minutes environ.Vérifiez si un service Windows est en cours d'exécution?

Si ce n'est pas le cas, comment puis-je redémarrer le service Windows à nouveau?

+0

Avec un autre service Windows? –

+0

pas dans le service – user280154

+0

je ne sais pas comme j'ai un service de fenêtre et j'ai essayé de l'exécuter si elle ne fonctionne pas mais je ne suis pas capable de le faire – user280154

Répondre

15

Vous pouvez vérifier si un service est en cours d'exécution avec un ServiceController:

ServiceController sc = new ServiceController("servicename"); 

if ((sc.Status.Equals(ServiceControllerStatus.Stopped)) || 
    (sc.Status.Equals(ServiceControllerStatus.StopPending))) 
{ 
    // Start the service if the current status is stopped. 
    sc.Start(); 
} 

Bien sûr, vous aurez besoin d'appeler cela d'un autre service, ou créer un petit programme que vous pouvez planifier pour exécuter toutes les 15 minutes environ.

+0

merci pour les ans mais cela je l'ai fait mais quand il est arrêté sc.start() donne une erreur comme s'il ne pouvait pas démarrer le service sur le nom de la machine ".". – user280154

+0

@user: Ow, mais c'est un autre problème alors. Le journal des événements doit afficher plus de détails sur les raisons pour lesquelles le service ne peut pas démarrer. – fretje

+0

voir si le service Windows n'est pas en cours d'exécution alors ce code ne fonctionnera pas correctement alors comment vérifier si le service est en cours d'exécution ou non pour ce service Windows. – user280154

2

Si le service n'est pas en cours d'exécution, il ne peut pas vérifier lui-même.

Vous devrez utiliser un deuxième service qui effectue la vérification.

+0

droite qui était les ans je cherchais maintenant ma prochaine question sera peut-je utiliser un fil pour le faire si oui alors comment puis-je faire un fil sur le service actuel si vous pouvez partager un site qui explique qu'il serait très apprécié. – user280154

+0

@ user280154 - Veuillez poser la question de filetage comme une nouvelle question.Et n'oubliez pas de _accept_ la réponse (cliquez sur la coche à côté de la réponse que vous aimez). – Oded

11

Vous n'avez pas besoin d'un processus supplémentaire pour récupérer votre service:

Si vous voulez être certain que votre service Windows est toujours en cours d'exécution, vérifiez ses propriétés dans l'onglet Récupération. Définissez toutes les actions d'échec sur "Redémarrer le service" et définissez "Redémarrer le service après" sur 0 minute. Le moment où votre service disparaît, il sera redémarré immédiatement. Augmentez le délai d'attente si elle est correct d'attendre un peu plus longtemps avant un redémarrage se fait:

Service Recovery settings http://www.robvangroenewoud.com/images/service_recovery.png

1

La fonctionnalité intégrée de récupération des services Windows (voir la capture d'écran dans le poste de Rob ci-dessus) va probablement répondre à vos besoins. Sinon, je suggère d'essayer Service Protector, qui est conçu pour garder automatiquement vos services Windows importants fonctionnant 24/7.

Questions connexes