2010-06-30 3 views
1

Je programme une application de surveillance qui doit afficher l'état de plusieurs services Windows. Dans la version actuelle, je peux savoir si un service est en cours d'exécution, arrêté, suspendu ou dans l'un des états en attente. C'est bien, mais je me demande s'il existe un moyen de vérifier si un service répond vraiment? Je suppose que cela peut être dans un état de fonctionnement, mais ne répond pas du tout! J'utilise la classe ServiceController à System.ServiceProcess. Pensez-vous que si un service ne répond pas, le ServiceController.Status retournera une exception?Comment tester la réactivité d'un Windows Service?

Comment aborderiez-vous le problème?

Merci

EDIT semble que: ServiceController.Status peut revenir 2 types d'exceptions:

System.ComponentModel.Win32Exception: An error occurred when accessing a system API. 
System.InvalidOperationException: The service does not exist as an installed service. 

Rien réactivité.

Répondre

2

Cela peut être évident, mais avez-vous essayé parler au service?

Il n'y a pas de façon commune de parler à un service, donc Windows ne peut pas interroger si le service répond toujours comme d'habitude. Il est parfaitement normal qu'un service se mette complètement en veille en attendant que des E/S externes se produisent, et Windows n'obtiendra donc pas de réponse tant que le service sera réellement opérationnel et fonctionnera exactement comme prévu.

La seule façon est d'envoyer en fait une demande, et attendre la réponse, et que vous avez besoin de canaux de communication inter-processus, comme:

  • réseau
  • canaux nommés
  • Messages

en gros, si vous avez besoin pour déterminer si un service est en mesure de répondre, vous devez vérifier si elle répond.

+0

N'a jamais travaillé avec IPC sur .NET. C'est l'occasion :) –

2

Les types de contrôleurs de service et les API ne peuvent fournir d'informations que sur la base de la réponse du service à ces API.

E.g. Vous pouvez créer un service qui répond correctement à ces API, mais qui ne fournit aucune fonctionnalité pour les heures paires. En fin de compte, vous devez définir "responsive" en fonction de la fonctionnalité des services (par exemple, un processeur batch traite des batchs) et fournir un mécanisme (API A2A, WMI, Performance Counters) pour faire surface.

+0

Ok, j'ai compris. Mais je pensais qu'il serait possible d'avoir quelque chose de similaire au statut de "réactivité" d'une application sur le gestionnaire de tâches Windows (ctrl-alt-del). Donc, au lieu d'aller au niveau fonctionnel, rester au niveau système/processus. –

Questions connexes