Création d'une application de type Service Windows
|
Création d'un service windows, ajout du programme d'installation, installation et verification du service.
|
|
Vu
25380
fois
|
Dans ce tutoriel, nous allons voir comment créer un service windows, ajouter un programme d'installation, l'installer et verifier son fonctionnement. I. Creation du service I.A. Préparation du service I.B. Ajout des composants necessaires II. Ajout du programme d'installation III. Installation et désinstallation du service IV. Vérification du service V. L'api GlobalMemoryStatus
I. Creation du service
Un service Windows est une application de type service s'exécutant généralement en tache de fond. L'utilisateur ne peut donc pas interagir avec lui. Il se presente sous la forme d'un executable, en grande partie gérer par windows. Il peut être lancé automatiquement au demarrage de l'ordinateur, arreter ou redemarrer tres simplement. Ses évenements sont tres souvent inscrit dans un journal d'evenement.
But du service : Nous allons donc développer un service qui va vérifier toute les 10 secondes notre mémoire libre par l'utilisation d'un api et émettre un bip si cette dernière descend en dessous des 80%. Les événements de ce service seront enregistrer dans un journal d'événement.
Pour commencer nous allons créer un nouveau projet de type Service Windows
L'avantage à utiliser ce modèle est de pouvoir bénéficier par héritage de toutes les fonctionnalités de la classe ServiceBase (Fournit une classe de base pour un service qui fera partie d'une application de service). A la création du projet VS.net va générer automatiquement le code spécifique au lien d'héritage : Inherits System.ServiceProcess.ServiceBase et donc nous fournir deux procédures : OnStart() qui permet d'initialiser le processus dont le traitement est effectué périodiquement grâce a un timer.
 |
Cette procédure est activé par Windows et ne doit jamais contenir de boucles infinies
|
Protected Overrides Sub OnStart(ByVal args() As String) ´Ajoutez ici le code pour démarrer votre service. Cette méthode doit ´permettre à votr service de faire son travail. End Sub |
OnStop() qui permet d'arrêter le service
Protected Overrides Sub OnStop() ´ Ajoutez ici le code pour effectuer les destructions nécessaires à l´arrêt ´de votre service. End Sub |
I.A. Préparation du service
Avant toute chose nous devons renommer notre service de Service1 en SMemoire pour nous permettre de mieux l'identifier.
puis, modifier la propriété AutoLog a true, ce qui nous permettra d'inscrire tous les événements liés au service, dans les journaux système.
Pour finir ouvrez la section #region du code, et dans la procédure Shared Sub Main() Modifier la ligne :
ServicesToRun = New System.ServiceProcess.ServiceBase() {New Service1} |
Par :
ServicesToRun = New System.ServiceProcess.ServiceBase() {New SMemoire} |
I.B. Ajout des composants necessaires
Sur la page [desing] de SMemoire.vb, rajouter :
- un contrôle [timer Serveur] nommé : Timer1 dont la propriété interval est défini a 10000 (10 Secondes)
- un contrôle [EventLog] nommé : Jevent


Le control Jvent de type journal d'événement , va nous permettre d'inscrire dans un journal de log, toute sorte d'information (demmarage du service, arrêt du service, état de la mémoire).
Nous allons donc écrire le code qui va nous permettre de créer le dit journal et de lui affecter en source le nom de notre service.
Dans la procédure Public Sub New() juste en dessous de InitializeComponent() rajouter le code suivant :
´si le journal de notre application n´existe pas If Not Jevent.SourceExists("ServiceMemoire") Then ´on le Cree Jevent.CreateEventSource("ServiceMemoire", "JrnlMemoire") End If ´et on lui indique la source de la création Jevent.Source = "ServiceMemoire" |
- La fonction SourceExists membre de System.Diagnostics.EventLog Détermine si une source d'événements est inscrite dans l'ordinateur local et prend en paramètre le nom de la source d'événement. Elle retourne vrai si la source est inscrite.
- La méthode CreateEventSource membre de System.Diagnostics.EventLog Crée un nouveau journal personnalisé sur l'ordinateur local. Elle attend en paramètre le nom de la source grâce à laquelle l'application est inscrite dans l'ordinateur et le nom du journal dans lequel les entrées de la source seront écrites.
- La propriété Source est de type string ,elle permet d'obtenir ou de définir le nom de la source à inscrire et à utiliser lors de l'écriture d'entrées dans le journal des événements.
Le control Timer1 va nous permettre grâce a l'événement Elapsed (déclenché en fonction de l'intervalle défini), de lancer la procédure de notre service (dans notre cas, émettre un bip et récupérer la mémoire libre).
il est déclanché ou arrêter par les procédures OnStart() ou OnStop()
Nous allons donc profiter de ces procédures pour inscrire un événement à chaque démarrage et à chaque arrêt du service tout en déclanchant ou en arrêtant notre Timer .
Pour ce faire, modifier les procédures OnStart() et OnStop() comme ci-dessous
Protected Overrides Sub OnStart(ByVal args() As String) Jevent.WriteEntry("démarrage du service") Timer1.Enabled = True End Sub
Protected Overrides Sub OnStop() Jevent.WriteEntry("Arrêt du service") Timer1.Enabled = False End Sub |
Modifier ensuite l'événement Elapsed de notre timer pour qu'il nous récupère les infos concernant notre mémoire.
Private Sub Timer1_Elapsed(ByVal sender As System.Object, ByVal e As System.Timers.ElapsedEventArgs) Handles Timer1.Elapsed ´si l´etat de notre memoire est critique alors If MemoireCritique () = True Then ´on emet un bip et on inscrit dans le journal l´état de notre mémoire libre Beep() Jevent.WriteEntry(Str(MemLibre) & "%") End If |
Votre service est créer, vous pouvez maintenant le compiler
 |
Pour voir l'api et la fonction retournant l'état de notre mémoire, reportez vous en fin d'article.
|
II. Ajout du programme d'installation
Un service Windows est une application de type service s'exécutant généralement en tache de fond. C'est donc un exécutable dont l'exécution est assuré en grande partie par Windows. Pour que Windows puisse l'exécuter, il doit être installé, c'est ce que nous allons voir dans ce cours.
Activer la fenêtre de conception SMemoire.vb [Desing] puis cliquer sur F4 pour activer sa fenêtre des propriétés. Au bas de la fenêtre cliquez sur le lien " Ajouter le programme d'installation " , qui va nous permettre de définir les actions liées à l'installation de notre service. Deux composant sont alors créer, l'un pour les paramètres de l'installation du processus, l'autre pour les paramètres liés a l'installation du service.
Dans les propriétés du ServiceInstaller1, il faut vérifier :
- la propriété ServiceName qui doit se nommer Smemoire (le nom du service a installer)
- la propriété StartType qui doit être en Automatique (le type de démarrage)
Ouvrez les propriété de votre projet (projet --> propriété de Smemoire), dans Objet de démarrage et sélectionner SMemoire. Vous pouvez maintenant générer et sauvegarder votre projet, vous vous retrouver avec un fichier ServiceMemoire.exe dans le répertoire bin de votre projet.
III. Installation et désinstallation du service
La création de notre service est réalisé, il ne nous reste plus qu'a le faire prendre en compte par le système d'exploitation en l'installant. C'est tres simple a réaliser, positionnez vous avec votre explorateur dans le répertoire c:\Windows\Micorsoft.net\Framework\v1.0.xxxx (xxxx represente la version de votre Framework) et lancer le fichier InstallUtil.exe , cela va vous ouvir une fenetre de commande, il ne vous reste plus qu'a taper :
InstallUtil " C:\projets\ServiceMemoire\bin\ServiceMemoire.exe " Le service va s'installer automatiquement.
Pour desinstaller le programme il suffira de refaire la même procedure mais de taper : InstallUtil /u " C:\projets\ServiceMemoire\bin\ServiceMemoire.exe "
IV. Vérification du service
Pour verifier que notre service soit bien installé, il suffit d'ouvir la console de management des Services de Windows et regarder que notre service est bien present. Pour ce faire, Cliquer sur demarrer --> panneau de configuration --> Outils d'administration --> Services , puis rechercher votre service (SMemoire)
Vous devez voir ceci :
Notre service est bien présent, l'installation c'est dérouler correctement, nous allons maintenant tester le service en lui meme.
 |
Avant touche chose n'oubliez pas de démarrer votre service.
|
Nous allons ensuite consommer volontairement de la memoire (ouvrez simplement plusieurs applications), et lorque le seuil de memoire critique defini par service sera atteint, l'ordinateur emettra un beep et ira inscrire dans le journal d'evenement du service l'etat de notre memoire libre. Il nous suffira de lire ce journal pour voir si les evenements ont bien été inscrit.
Pour lire le journal, il faut une fois de plus ouvrir la console de management Windows, mais cette fois ci, celle des Observateur d'événements. Cliquer sur demarrer --> panneau de configuration --> Outils d'administration --> Observateur d'événements
Vous devez apercevoir ceci :
 |
Vous pouvez vous servir des services windows, pour tout type de surveillance, s'exectuant sur de longue periode s'executant sur leur propre sessions.
|
V. L'api GlobalMemoryStatus
nous permet de récupérer sous forme de structure toute sorte d'information concernant l'état de notre mémoire. Il se declare de la façon suivante :
Declare Sub GlobalMemoryStatus Lib "kernel32" (ByRef lpBuffer As MEMORYSTATUS)
´La structure : Structure MEMORYSTATUS Dim dwLength As Integer Dim dwMemoryLoad As Integer Dim dwTotalPhys As Integer Dim dwAvailPhys As Integer Dim dwTotalPageFile As Integer Dim dwAvailPageFile As Integer Dim dwTotalVirtual As Integer Dim dwAvailVirtual As Integer End Structure La fonction MemoireCritique()Private Function MemoireCritique() As Boolean Dim Memoire As MEMORYSTATUS GlobalMemoryStatus(Memoire) MemLibre = Int((Memoire.dwAvailPhys / Memoire.dwTotalPhys) * 100) If MemLibre < 80 Then Return True Else Return False End If End Function |
|