2009-12-30 8 views
2

Je veux créer un service Windows qui surveille un autre service Windows et m'assure qu'il fonctionne. parfois le service Win que je veux regarder reste dans la mémoire (apparaît dans le gestionnaire de tâches, donc il est considéré comme un service courant, mais le fait est qu'il ne fait rien, il est mort, son timer ne tire pas pour une raison , ce qui n'est pas le sujet de cette question). Ce dont j'ai besoin, c'est de faire en sorte que le Watch Service d'un chien de garde lise une valeur dans la mémoire que l'autre service surveillé écrit périodiquement. Je pensais utiliser des tubes nommés mais je ne veux pas ajouter de problèmes de communication à mes services, je veux savoir s'il existe un moyen de créer une telle mémoire partagée entre 2 applications (éventuellement en utilisant un Mutex de système nommé?)Watchdog win service pour regarder un autre service win

+0

Qu'est-ce qui va surveiller votre service de surveillance? –

+0

Le chien de garde sera très simple, il est très improbable qu'il se bloque trop –

Répondre

2

Puisque vous devez faire face à la détection d'un service de zombies, je ne pense pas que l'utilisation d'un objet noyau comme un mutex puisse vous aider, vous devez détecter activité. Un sémaphore n'est pas non plus un bon choix. Ma préférence personnelle serait un tube nommé envoyant de petits messages de pulsations (puisque cela pourrait être détecté sur un réseau également), mais si vous voulez éviter la complexité des communications de tuyaux - ce que je suppose est compréhensible - alors vous pourriez mettre à jour un DWORD dans une clé de registre prédéterminée. Si les deux services s'exécutent sous LocalSystem, vous pouvez écrire une clé/valeur dans HKEY_LOCAL_MACHINE. Exécutez une minuterie de pompage et surveillez les changements de la clé de temps en temps (attention au compteur). Vous ne disposerez pas d'une pompe à fenêtre/message normale, SetTimer est donc interdit, mais vous pouvez toujours utiliser timeSetEvent ou les minuteurs en attente.

HKLM ne sera pas disponible si l'un des services fonctionne sous un compte non-administrateur, mais c'est une situation assez rare pour les services. Bien sûr, tout cela suppose que vous avez accès au code des deux services. Regarder un service tiers limiterait sévèrement vos options.