Création d’un service Windows dans VB.NET
Environnement: .NET, Visual Basic
Introduction
Vous souhaitez écrire une application qui surveille en permanence certains fichiers, crée un journal, ou autre, et qui s’exécute constamment en arrière-plan pendant que la machine est occupée à faire autre chose. La meilleure façon de le faire était d’exécuter une application Windows en continu ou à intervalles réguliers avec l’utilisation du planificateur Windows. Mais il y avait un gros inconvénient: quelqu’un devait se connecter au système pour démarrer cette application.
Ce n’est plus un problème car la meilleure façon de faire tout cela est de créer un service Windows pour Windows 2000 / Windows NT.
Qu’Est-Ce Que Le Service Windows (Précédemment Appelé Service NT)?
La fonction principale d’un service Windows est d’exécuter une application en arrière-plan. Quelques éléments qui les distinguent d’une application Windows sont le fait qu’un service Windows démarre avant que tout utilisateur ne se connecte au système (s’il a été configuré pour démarrer au démarrage). Le service peut être configuré de telle sorte qu’il oblige l’utilisateur à le démarrer manuellement.
En outre, le service Windows a son propre processus; par conséquent, il fonctionne très efficacement. Normalement, un service Windows n’aura pas d’interface utilisateur pour la simple raison qu’il peut être exécuté même si personne n’est connecté au système. Ce n’est pas une règle; vous pouvez toujours avoir un service Windows avec une interface utilisateur.
Sous Windows 2000, vous pouvez afficher tous les services en cours d’exécution sur votre ordinateur en ouvrant Panneau de configuration, Outils d’administration, puis en cliquant sur Services.
Création d’un service Windows dans VB.NET
avant VB.NET, créer un service Windows a été beaucoup de travail. Vous avez dû utiliser une procédure au niveau du système qui n’était pas très facile, mais grâce à VB.NET c’est devenu très facile. Nous allons maintenant apprendre à créer un service Windows.
Vous devriez savoir quelques choses avant de plonger. Le service Windows n’est pas disponible sous Windows 95, 98 ou ME. Vous devez avoir Windows NT ou Windows 2000 pour exécuter des Services.
L’avantage d’utiliser .NET est que le framework intègre toutes les classes. Cela nous aidera à créer, installer et contrôler le service Windows.
Ouvrez votre Visual Studio.NET, créez un nouveau projet de service Windows, que nous appellerons MyService, puis cliquez sur OK.
Ajoutez le contrôle de minuterie dans la barre d’outils de l’onglet Composants. Dans la fenêtre propriétés de Timer1, modifiez la propriété Interval sur 10000, soit 10 secondes.
Le Code source
Double-cliquez sur le contrôle Timer1 pour ouvrir une fenêtre de code pour Timer1_Elapsed et tapez le code suivant. (Ce code doit s’exécuter toutes les 10 secondes.)
Dim MyLog As New EventLog() ' create a new event log ' Check if the the Event Log Exists If Not MyLog.SourceExists("MyService") Then MyLog.CreateEventSource("MyService", "Myservice Log") ' Create Log End If MyLog.Source = "MyService" ' Write to the Log MyLog.WriteEntry("MyService Log", "This is log on " & _ CStr(TimeOfDay), _ EventLogEntryType.Information)
Tapez le code suivant dans la procédure OnStart. (Cette procédure est appelée lorsque vous démarrez le service, ce qui doit activer le minuteur.)
Timer1.Enabled = True
Et tapez le code suivant dans la procédure OnStop. (Cette procédure est appelée lorsque vous arrêtez le service, ce qui désactive la minuterie.)
Timer1.Enabled = False
Notre application est maintenant prête, mais certaines choses doivent encore être faites avant d’aller de l’avant. Lorsque nous construisons cette application, l’exécutable créé n’est pas une application Windows; par conséquent, vous ne pouvez pas simplement cliquer et l’exécuter. Il doit être installé en tant que service, mais ne vous inquiétez pas; nous n’avons pas à le faire manuellement. VB.Net a la possibilité d’ajouter un installateur à notre programme, puis d’utiliser un utilitaire pour installer le service.
Ajout du Programme d’installation au projet
Ouvrez le Service1.fenêtre de conception vb et cliquez avec le bouton droit de la souris, puis sélectionnez l’option Ajouter un programme d’installation. Cela ajoute un projet d’installation, ProjectInstaller.vb, avec deux contrôles, ServiceProcessInstaller1 et ServiceInstaller1, dans notre projet existant.
Sélectionnez le contrôle ServiceInstaller1 et ouvrez la fenêtre des propriétés. Remplacez les propriétés ServiceName et DisplayName par MyService. (Il s’agit du nom que vous souhaitez afficher dans la liste des services dans les fenêtres Services.)
Sélectionnez le contrôle ServiceProcessInstaller1 et ouvrez la fenêtre des propriétés. Modifiez la propriété Account en LocalSystem. (Cela doit être spécifié car nous devons l’exécuter sur notre machine locale.)
Il est maintenant temps de construire l’application et de créer un exécutable. Sélectionnez Solution de construction dans le menu de construction pour créer un exécutable avec des instructions d’installation pour le service.
Installation du Service
Pour installer ce service, nous devons utiliser le programme InstallUtil, qui est un utilitaire .NET, pour installer le Service Windows. Vous pouvez le trouver dans le dossier C:\WINNT\Microsoft.NET\Framework\v1.0.3705 . (Cela peut être différent sur votre ordinateur, selon la version que vous utilisez.)
Vous pouvez également exécuter la fenêtre de commande .NET en sélectionnant Démarrer, Programmes, Microsoft Visual Studio .NET, Outils Visual Studio .NET, Invite de commande Visual Studio .NET. Cela définit tous les chemins requis pour vous.
Tapez la commande suivante dans cette fenêtre : InstallUtil C:\tgol\Myservice\Bin\Myservice .EXE. (C’est le chemin de l’exécutable du service que nous venons de créer. Rappelez-vous, VB.NET créé l’exécutable dans le dossier Bin sous le dossier projet. Assurez-vous de changer cela en chemin exécutable.) Veuillez consulter le message et vous connecter pour vous assurer que le service est correctement installé.
Démarrer le service
Exécuter un service et démarrer un service sont deux choses différentes. Lorsque nous installons le service avec InstallUtil, nous exécutons maintenant le service mais ne l’avons pas encore démarré. Pour afficher et démarrer le service, ouvrez le panneau de configuration. Ouvrez Outils d’administration, cliquez sur Services, localisez MyService, cliquez avec le bouton droit de la souris et sélectionnez Démarrer pour démarrer ce service.
Maintenant, notre service a commencé. Ouvrez l’Observateur d’événements à partir des Outils d’administration et cliquez sur le Journal de l’application pour voir les journaux créés par le Service (MyService) toutes les 10 secondes. (Si vous ne voyez aucun journal, cliquez sur Actualiser. Vous devrez continuer à rafraîchir pour voir les derniers journaux d’événements.
Arrêt du service
Ouvrez le Panneau de configuration, ouvrez les Outils d’administration, cliquez sur Services, cliquez avec le bouton droit sur MyService et sélectionnez Arrêter pour arrêter le service.
Désinstallation du Service
Cette procédure est similaire à l’installation du service, mais nous allons maintenant exécuter le paramètre InstallUtil avec /U, qui désinstalle le service :
InstallUtil/U C:\tgol\Myservice\Bin\Myservice .exe (ou chemin exécutable sur votre ordinateur). Veuillez consulter le message pour confirmer que le service est correctement désinstallé.
Conseils
- Arrêtez le service et fermez la fenêtre de service avant d’installer/désinstaller le service.
- Toujours désinstaller/installer si vous apportez des modifications à l’application de service.
- Essayez d’éviter l’interface utilisateur, les entrées et la msgbox dans l’application de service.
- Open ProjectInstaller.vb, sélectionnez le contrôle ServiceInstaller1 et ouvrez la fenêtre de propriété. Changez la propriété StartType en Automatique si vous souhaitez démarrer le service automatiquement.
Conclusion
Le service Windows est souvent négligé. Utilisez le service Windows au lieu d’une application standard lorsque vous devez surveiller ou administrer quelque chose en arrière-plan. Le seul inconvénient est la procédure d’installation, mais je parie qu’il y a plus d’aspects positifs que négatifs lors de la sélection du service Windows par rapport aux applications exécutant Windows Scheduler.