Voici un petit tutoriel en .net lié à une problématique rencontrée en stage par rapport aux Service Windows.

Le problème

Mon but était de créer un service windows pour une partie d'une application qui est un serveur en attente de réception ou d'envoi de fichier.

La création d'un service windows dans vb.net est simplissime, toutefois son installation semble nettement plus laborieuse lorsque l'on voit les différents tutoriaux sur le sujet.

ajouter un installeurEn effet une fois notre service prêt, on doit ajouter un installeur, en cliquant droit sur la partie "design" de notre service et en sélectionnant "ajouter un installeur". Une fois la configuration effectuée, on peut reconstruire la solution.

Et c'est à partir de ce point la que l'on nous propose seulement une solution en ligne de commande pour installer et désinstaller notre service.

On doit tout d'abord trouver le fichier installUtil.exe, qui est dans c:\windows\Microsoft.net\Framework\"numero de version" puis appeler notre service avec ce programme : installUtil.exe c:\.....\monService.exe.

Pour le désintaller c'est la même commande mais avec installUtil.exe /U

La solution

Et voici venu le temps de la solution cachée, que l'on ne retrouve dans aucun tutoriel mais sur le support de Microsoft (et pas dans le msdn).

Voici l'adresse du lien :
http://support.microsoft.com/default.aspx?scid=kb%3Bfr%3B317421 qui nous détail la procédure permettant la création d'un installeur pour notre service !

Utilisation d'un projet de configuration compilé pour installer le service Windows

Une fois terminées les étapes de la section précédente relative à la configuration du projet de service Windows, procédez comme suit pour ajouter un projet de déploiement qui assemble l'application du service en vue de son installation :
1.Pour ajouter un nouveau projet à votre projet LogWriterService, procédez comme suit :
a. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur Solution 'LogWriterService', pointez sur Ajouter, puis cliquez sur Nouveau projet.
b. Sous Types de projets, cliquez sur Projets de configuration et de déploiement.
c. Sous Modèles, cliquez sur Projet de configuration.
d. Dans la zone de texte Nom, tapez ServiceSetup.
e. Dans la zone de texte Emplacement, tapez C:\, puis cliquez sur OK.
2.Pour indiquer au projet de déploiement ce qu'il doit assembler, procédez comme suit :
a. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur ServiceSetup, pointez sur Ajouter, puis cliquez sur Sortie de projet.
b. Dans la boîte de dialogue Ajouter le groupe de sorties du projet, cliquez sur LogWriterService dans la zone Projet.
c. Cliquez sur Sortie principale, puis sur OK.
3.Pour que votre installation soit correcte, il vous suffit d'ajouter une sortie principale. Pour ajouter les actions personnalisées, procédez comme suit :
a. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur ServiceSetup, pointez sur Affichage, puis cliquez sur Actions personnalisées.
b. Cliquez avec le bouton droit sur Actions personnalisées, puis cliquez sur Ajouter une action personnalisée.
c. Cliquez sur Dossier d'application, puis sur OK.
d. Cliquez sur Sortie principale de LogWriterService (Active), puis sur OK. Notez que Sortie principale apparaît sous Installer, Valider, Restaurer et Désinstaller.
4.Les projets de configuration ne sont pas inclus dans la configuration de génération par défaut. Pour générer la solution, procédez comme suit :
a. Cliquez avec le bouton droit sur LogWriterService, puis cliquez sur Générer. Ensuite, cliquez avec le bouton droit sur ServiceSetup, puis cliquez sur Générer.

-ou-

Dans le menu Génération, cliquez sur Gestionnaire de configuration pour générer la solution entière en une fois. Activez la case à cocherGénérer pour ServiceSetup.
b. Appuyez sur la combinaison de touches CTRL+MAJ+B pour générer la solution entière. Une fois la solution générée, vous disposez d'un package d'installation complet pour le service.
5.Pour installer le service nouvellement créé, cliquez avec le bouton droit sur ServiceSetup, puis cliquez sur Installer.
6.Dans la boîte de dialogue ServiceSetup, cliquez trois fois sur Suivant. Remarquez l'apparition d'une barre de progression pendant que le service s'installe.
7.Une fois le service installé, cliquez sur Fermer.

Contrôler le service à partir d'un programme externe

C'est le deuxième problème que j'ai rencontré, n'ayant rien trouvé là-dessus non plus, je souhaitais pouvoir démarrer et arrêter mon service à partir de mon application principale.

Il faut ouvrir la fenêtre "exploration de serveurs", puis en déployant notre pc, on peut avoir la liste des services, et en glissant le service dans la zone de "design" de notre application on option alors un "ServiceController", qui est extremement simple à utiliser : ServiceController1.Start()...

ajouter un serviceController

Voilà j'espère que ce tutoriel sera utile à de nombreuses personnes qui rencontreront le même problème que moi.