2009-09-24 8 views
2

J'ai un service Windows qui ne démarre pas dans certaines circonstances. Lorsqu'il ne démarre pas, la séquence d'événements suggère que mon code .NET dans le service a probablement été exécuté, mais aucun message de journal des événements n'apparaît.Services Windows ne se connectant pas au journal des événements

Les messages du journal des événements s'affichent lorsque le service démarre correctement.

Comment fonctionne le journal des événements? Et comment fonctionne le gestionnaire de services Windows?

Si un service expire (ce qui arrive), est-il possible que les messages du journal des événements associés à ce service soient supprimés?

Si un service expire, cela signifie-t-il qu'il a appelé mon code .NET? Ma méthode de démarrage appelle un thread d'arrière-plan, donc je ne comprends pas pourquoi le service expirerait.

N'ajoute pas vraiment.

Répondre

3

Le journal des événements nécessite des actions de journalisation explicites. Ceux que vous voyez à partir du démarrage et de l'arrêt sont créés par le gestionnaire de contrôle de service du système d'exploitation. Pour obtenir une connexion au-delà, vous devez utiliser explicitement la classe System.Diagnostics.EventLog.

Modifier: si vous faites cela et que vous ne voyez toujours pas les messages, cela signifie que l'opération de journal n'a pas été exécutée ou a échoué, peut-être avec une exception Win32Exception.

+0

Ouais, et c'est ce que je fais/cherche. Voir le commentaire ci-dessus. – peter

+0

@peter: ah, d'accord. Voir ma modification. –

+0

Droite. Bon point. Une exception aurait pu se produire, mais c'est toujours difficile lorsqu'une exception se produit dans le code de journalisation, vous ne pouvez pas l'enregistrer exactement! – peter

2

Cela dépend vraiment de ce que fait votre code. Pourquoi ne pas le déboguer en utilisant Debugger.Launch() ou envelopper le code de départ dans un try ... catch pour capturer le message d'erreur. Il est peu probable que le service enregistre beaucoup dans le journal des événements ... c'est le travail des développeurs :)

+0

Merci, mais je fais référence à notre code qui écrit dans le journal des événements. Si notre code s'exécute, il écrira dans le journal des événements et c'est ce que je cherche. Je suppose que je demande si le journal des événements ne contient pas de messages, cela signifie-t-il que cela n'atteint pas notre code? – peter

+0

J'ai des suspects vous voyez que notre code est exécuté en raison de la raison pour laquelle le service échoue. Une erreur de sécurité est en cours d'enregistrement en disant que le pare-feu Windows ne peut pas demander à l'utilisateur à propos de notre application. Notre application expose WCF, ce qui suggère que notre code est en cours d'exécution. – peter

+0

Non, cela peut signifier que l'écriture dans le journal des événements déclenche l'exception! Ouais, d'après ce que vous dites, ça sonne comme si vous frappiez votre code ... plus de débogage/enquête probablement nécessaire pour être sûr ... –

Questions connexes