Implémenter un service Windows avec TopShelf

Un article de Benoit Benardin

Lors de l’implémentation d’une tache de fond, se pose toujours la question Console App + Schedule ou Service Windows. L’un est plus facile développer car plus facile à débugger, l’autre apparait plus propre et plus en accord avec une solution d’entreprise.

Mais saviez-vous que ce choix est obsolète avec des librairies comme TopShelf ?

blog ai3 astonished Implémenter un service Windows avec TopShelf

Le but de ce post sera justement de vous montrer cela avec un petit tuto.

  • On commence par créer un projet Visual Studio de type Console Application

blog ai3 topshelf1-300x240 Implémenter un service Windows avec TopShelf

  • On ajoute les package Nugget suivant:
    • TopShelf
    • TopShelf.Log4Net   

blog ai3 topshelf2-300x116 Implémenter un service Windows avec TopShelf

blog ai3 topshelf3-300x80 Implémenter un service Windows avec TopShelf

  • On crée une classe pour héberger notre service Windows : MyService.cs
    • Puis on rajoute 2 méthodes: Start() et Stop().
    • Ce sont ces méthodes qui seront appelées au démarrage et à l’arrêt du service.

blog ai3 topshelf4-300x150 Implémenter un service Windows avec TopShelf

  • Ensuite on crée une classe statique pour héberger la configuration de TopShelf : ConfigureService.cs
    • Il faut rajouter une méthode Configure().
    • C’est dans cette méthode que l’on décide du nom du service, du compte utilisé et qui appeler au démarrage et à l’arrêt du service
    • Il est donc normal de l’on fasse appel à notre classe de service aux méthodes Start() et Stop() créées précédemment.

 

blog ai3 topshelf5 Implémenter un service Windows avec TopShelf

  • Reste à rajouter dans le Program.cs de notre console application, l’appel à la configuration de notre service dans la méthode Main.

blog ai3 topshelf6-300x89 Implémenter un service Windows avec TopShelf

A ce niveau, nous avons un service fonctionnel et pour le tester, nous avons 2 choix :

  • Presser F5 pour le débugger comme l’importe quelle Console App

blog ai3 topshelf7-300x199 Implémenter un service Windows avec TopShelf

  • Le déployer en service Windows en ouvrant une commande (CMD) en administrateur local et en naviguant vers le .exe de notre app compilée :

blog ai3 topshelf9-300x63 Implémenter un service Windows avec TopShelf

  • Puis :
    • Utiliser la Commande « DemoTopshelf.exe install » pour créer le service windows et l’installer

blog ai3 topshelf8-300x159 Implémenter un service Windows avec TopShelf

    • Ou « DemoTopshelf.exe uninstall » pour le retirer

blog ai3 topshelf10-300x195 Implémenter un service Windows avec TopShelf

Voila ! Le meilleur des 2 mondes servi sur un plateau : il y a rien de plus facile que de débugger une console APP et lors du déploiement la commande pour transformer notre projet en service windows est des plus simples !

 

*Applaudissement*, *Standing Ovation*, *Jet de fleurs*

 

Mais on ne va pas s’arrêter là… On va pousser un peu plus loin. Il nous faut de quoi logguer (obligatoire pour un service Windows et tous les projets en général…. hein….. à bon entendeur …. )

blog ai3 suitknockout Implémenter un service Windows avec TopShelf

Vous avez remarqué qu’on a rajouté le package nugget TopShelf.Log4Net ? Il s’agit du package d’une des solutions de log les plus connue, adaptée à TopShelf. Et vous allez voir, l’intégration est vraiment simple:

  • Pour notre exemple, on commence par rajouter un fichier à notre projet : log.config. Ce fichier va héberger la configuration de Log4net. C’est pour l’exemple, vous êtes pas obligé de faire comme cela chez vous.

blog ai3 topshelf11-300x183 Implémenter un service Windows avec TopShelf

  • N’oubliez pas dans les propriétés du fichier de configuration de dire à Visual Studio de copier le fichier dans le dossier d’Output

 

  • Reste à retourner dans la classe de configuration de notre service : ConfigureService.cs et rajouter la ligne pour configurer Log4Net via notre fichier log.config

blog ai3 topshelf12-300x174 Implémenter un service Windows avec TopShelf

  • Et enfin de faire notre petite classe de logger.

blog ai3 topshelf13-300x133 Implémenter un service Windows avec TopShelf

Done ! Vous avez un console app facile à débugger, qui se transforme en service Windows à la demande. Le tout avec le mécanisme de log qui va bien.

blog ai3 topshelf14 Implémenter un service Windows avec TopShelf

Si besoin, la petite application de démo est disponible ICI

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.