10 votes

Pourquoi mon service Windows c# s'arrête-t-il de fonctionner sans qu'aucun message ne soit écrit dans le journal des événements de l'application ?

Je suis assez novice en matière de services Windows. J'ai créé un installateur pour mon service Windows c# et l'installation sur le serveur (Windows Server 2003) semble avoir fonctionné. Lorsqu'il est lancé, il écrit Service started successfully dans le journal. Lorsqu'il est arrêté, il écrit Service stopped successfully . Cependant, il arrive que le service s'arrête de fonctionner sans rien écrire dans le journal, et je le relance alors manuellement. Lorsque je consulte le journal par la suite, il indique que Service started successfully comme prévu. C'est bizarre de voir cela dans le journal deux fois de suite, car il manque manifestement une entrée où le service a cessé de fonctionner.

Quelles pourraient être les causes potentielles de ce phénomène ? J'ai configuré le service comme automatique et je l'ai installé pour qu'il fonctionne pour tous les utilisateurs. J'avais l'impression que cela signifiait que le service démarrait automatiquement au démarrage de la machine. Comment puis-je savoir pourquoi il s'est arrêté ? Les services qui s'arrêtent écrivent-ils automatiquement dans le journal des événements ou dois-je gérer les exceptions de manière à ce qu'elles enregistrent leur propre raison de l'arrêt ?

Edit : Quelques informations supplémentaires :

  • Je l'ai configuré pour me connecter en tant que compte système local.
  • Dans les options de récupération, je l'ai configuré pour redémarrer au premier échec. Je n'ai rien pour la deuxième panne ou les pannes suivantes.

Mise à jour : Un répondant a recommandé un gestionnaire d'exception global. Même si je ne vais pas mettre en œuvre cette solution de façon permanente, cela m'aidera au moins à déterminer où le problème se produit. J'ai testé cette solution avec mon service installé et elle fonctionne. J'ai découvert que les exceptions non gérées font en réalité planter le service sans rien écrire dans le journal. Je pensais que le service signalerait au moins une erreur d'application, mais ce n'est pas le cas.

static void Main()
{
    AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

    //other code here
}

static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    Utilities.WriteIt(e.ExceptionObject as Exception);
}

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