Un service écrit en .NET peut-il se terminer automatiquement?

J’ai une application de service écrite en C # et dans certaines circonstances, j’aimerais qu’elle se termine elle-même. Cela se produirait après que le service ait fonctionné pendant un certain temps. Cela ne se produirait donc pas dans l’événement OnStart ().

Tout ce que j’ai lu jusqu’à présent donne à penser que le seul moyen sûr de mettre fin à un service consiste à utiliser le Gestionnaire de contrôle des services. Mon service fonctionne en tant que service local et ne dispose pas des droits nécessaires pour démarrer ou arrêter des services. Je ne peux donc pas accéder au GDS depuis le service lui-même. Existe-t-il un autre moyen de se terminer tout en respectant les règles du SCM?

Essayez ServiceBase.Stop() .

Si vous souhaitez mettre fin au service au lieu de l’arrêter (peut-être parce que le service a intercepté une exception par ailleurs non gérée), vous pouvez utiliser Environment.Exit(1) (utilisez un autre code de sortie si vous le souhaitez).

Windows découvrira que le service s’est terminé de manière inattendue. Si le service a été configuré pour récupérer, la procédure de récupération utilisée inclut des options pour le redémarrage du service, l’exécution d’un programme ou le redémarrage de l’ordinateur.

Que se passe-t-il si vous laissez simplement tous les threads en cours d’exécution se terminer? Je peux imaginer trois résultats possibles:

  • Le SCM notifie et décide que vous avez terminé correctement
  • Le SCM remarque, pense que vous êtes mort et vous redémarre
  • Le SCM ne remarque pas, et vous montre comme toujours en cours d’exécution

EDIT: Je soupçonne que cette réponse est vraiment la meilleure, mais je vais la laisser (pour le moment) juste pour des raisons d’intérêt.

Ne faites pas fonctionner le service sous Service local. Faites-le fonctionner sous un utilisateur disposant des droits nécessaires pour arrêter un service.

Bien que l’idée de services à terminaison automatique ne soit pas la meilleure des idées. Ce seul fait signifie qu’il devrait s’agir d’une application et non d’un service.