Vous êtes sur la page 1sur 21

Cours .

NET
Services Windows

15:35:53
Caractéristiques
Application qui est installée comme service. Le fichier exécutable (.exe) doit d’abord être
installé sur le serveur pour qu’il puisse fonctionner de manière utile.

Application qui s’exécute pendant une longue durée. Elle interroge ou surveille généralement
quelque chose dans le système.

Peut être lancé automatiquement au démarrage de l’ordinateur, et peut être suspendu et


redémarré.

N’affiche aucune interface utilisateur et n’interfère pas avec d’autres utilisateurs travaillant
sur le même ordinateur.

Un service Windows peut s'exécuter dans le contexte de sécurité d’un compte d’utilisateur
spécifique (différent de l’utilisateur connecté ou du compte d’ordinateur par défaut)

La méthode Main de l’application de service Windows doit émettre la commande Run pour
les services contenus dans le projet. La méthode Run charge les services dans le Gestionnaire
de contrôle des services sur le serveur approprié.

Hérite de la classe ServiceBase. 15:35:53


Création du projet (modèle service Windows)
 Ouvrir Visual Studio 2019 en l’exécutant en tant qu’administrateur.
 Dans la page de démarrage, choisissez Créer un nouveau projet.
• Dans la page créer un projet, dans la zone de recherche, entrez Service
Windows. Ensuite, choisissez C# dans la liste langage, puis choisissez toutes les
plateformes dans la liste plateforme. Choisissez le modèle  Service Windows(.Net
Framework), puis choisissez suivant.
• Dans la boîte de dialogue configurer votre nouveau projet , entrez Le nom de votre
projet dans la zone nom du projet  «MonPremierServiceWindows». Choisissez
ensuite Créer.
La classe MonPremierServiceWindows
 Elle doit redéfinir au minimum les méthodes OnStart et OnStop

namespace MonPremierServiceWindows
{
public partial class MonPremierServiceWindows : ServiceBase
{
public MonPremierServiceWindows()
{
InitializeComponent();
}

protected override void OnStart(string[] args)


{
}

protected override void OnStop()


{
}
}
}
15:35:54
Classe Program
Méthode Main

namespace MonPremierServiceWindows
{
static class Program
{
/// <summary>
/// Point d'entrée principal de l'application.
/// </summary>
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new MonPremierServiceWindows()
};
ServiceBase.Run(ServicesToRun);
}
}
}

15:35:54
Ajout de fonctionnalités au service
Ajout d’un journal des événements personnalisé au service Windows.
Clic-droit sur le nom de la classe et on choisit « Concepteur de vues ».
Attention ! Les journaux des événements ne sont en aucune façon associés aux services
Windows. Dans ce cas-ci, le composant EventLog est utilisé comme un exemple du type de
composants que vous pouvez ajouter à un service Windows.

15:35:54
Ajout de fonctionnalités au service

À partir de la section Composants de la boîte à outils,


faites glisser un composant EventLog jusqu'au concepteur.

15:35:54
Ajout de fonctionnalités au service
L’ajout du composant EventLog a ajouté automatiquement du code dans votre
classe MonPremierServiceWindows.designer.cs. Sinon ajoutez le code dans le
constructeur manuellement.

private void InitializeComponent()


{
this.eventLog1 = new System.Diagnostics.EventLog();

((System.ComponentModel.ISupportInitialize)
(this.eventLog1)).BeginInit();
//
// MonPremierServiceWindows
//
this.ServiceName = "MonPremierServiceWindows";
((System.ComponentModel.ISupportInitialize)(this.eventLog1)).EndInit();

#endregion

// Déclaration de l'objet EventLog 15:35:55


private System.Diagnostics.EventLog eventLog1;
Ajout de fonctionnalités au service
On modifie le constructeur pour définir un journal des
événements personnalisé :
public MonPremierServiceWindows()
{
InitializeComponent();

eventLog1 = new System.Diagnostics.EventLog();


if (!System.Diagnostics.EventLog.SourceExists("MonPremierServiceWindowsSource"))
{
System.Diagnostics.EventLog.CreateEventSource(
"MonPremierServiceWindows", "MonNouveauLog");
}

// Définir le nom de la source à utiliser pendant l'écriture dans le journal


// des événements
eventLog1.Source = "MonPremierServiceWindows";

// Définir le nom du journal à utiliser en lecture et en écriture.


eventLog1.Log = "MonNouveauLog";

}
15:35:55
Définir les actions à effectuer lors du démarrage du service

 On modifie le traitement qui doit se produire au démarrage du service


dans la méthode OnStart().

protected override void OnStart(string[] args)


{
// Ecrire dans le journal des événements
eventLog1.WriteEntry("Dans la méthode OnStart");

Le traitement est configuré dans la méthode OnStart .

Toutefois, la méthode OnStart n'effectue pas elle-même le traitement.

La méthode OnStart doit retourner au système d'exploitation dès que le service est
en cours d'exécution. Elle ne doit pas s'exécuter indéfiniment en boucle ni se
bloquer. 15:35:55
Définir les actions à effectuer lors du démarrage du service
Pour définir un mécanisme d'interrogation simple, on peut utiliser le composant
System.Timers.Timer comme suit :

Dans la méthode OnStart, on définit des paramètres sur le composant, puis on affecte à la
propriété Enabled la valeur true. La minuterie déclenche périodiquement des événements dans le
code, lesquels indiquent au service qu'il peut effectuer son traitement.

protected override void OnStart(string[] args)


{
// Ecrire dans le journal des événements
eventLog1.WriteEntry("Dans la méthode OnStart");

// On configure un timer pour se déclencher toutes les minutes.


System.Timers.Timer timer = new System.Timers.Timer();
timer.Interval = 60000; // 60 secondes
timer.Elapsed += new System.Timers.ElapsedEventHandler(this.OnTimer);
timer.Start();
}

15:35:55
Définir les actions à effectuer lors du démarrage du service
Ajoutez une variable membre à la classe. Elle contient l’identificateur de l’événement suivant à
écrire dans le journal des événements : private int eventId = 1;

Ajoutez le code pour gérer l'événement du minuteur :

public void OnTimer(object sender, System.Timers.ElapsedEventArgs args)


{
// Tracer le nombre d'exécution du traitement
eventLog1.WriteEntry("Exécution du traitement", EventLogEntryType.Information, eventId++);

// TODO: Insérer ici le traitement que doit faire le service.

15:35:55
Définir les actions à effectuer lors de l'arrêt du service
La méthode OnStop() s'exécute lorsqu'une commande Arrêter est envoyée au service par le Gestionnaire de
contrôle des services (SCM).

Lorsque le SCM reçoit une commande d’arrêt, il utilise la valeur de CanStop pour vérifier si le service accepte
cette commande.

Si CanStop est true, la commande d’arrêt est transmise au service et la méthode OnStop est appelée si elle est
définie. Si OnStop n’est pas implémentée dans le service, le SCM gère la commande d’arrêt.

Si CanStop est false, le SCM ignore la commande d’arrêt. Il n’est pas transmis au service. La commande
d’arrêt retourne et lève une exception.

protected override void OnStop()


{
eventLog1.WriteEntry("Dans la méthode OnStop.");

// TODO: Insérer ici le traitement que doit faire le service


// Lorsqu'il reçoit une commande Arrêter.
}
15:35:55
Définir d'autres actions du service
La méthode OnShutdown est à utiliser pour spécifier le traitement qui se produit lorsque le système d’exploitation
s’arrête. Elle est à implémenter lorsque la propriété CanShutdown est true.

La méthode OnPause() est à utiliser pour spécifier le traitement qui se produit lorsque le service reçoit une
commande de suspension.

la méthode OnContinue() s'exécute lorsqu'une commande Continuer est envoyée au service par le Gestionnaire de
contrôle des services (SCM). Elle spécifie les actions à effectuer lorsqu'un service reprend son fonctionnement normal
après avoir été suspendu.

Les méthodes OnPause() et OnContinue() sont à implémenter lorsque la propriété CanPauseAndContinue est true.

protected override void OnContinue()


{
eventLog1.WriteEntry("Dans la méthode OnContinue.");
}

protected override void OnPause()


{
eventLog1.WriteEntry("Dans la méthode OnPause.");
}
15:35:55
Installation d’un service Windows
 L'utilitaire de contrôle des services SC (Services Control) est un puissant outil en ligne de commande
permettant de gérer les services Windows.
 Syntaxe
 SC [NomServeur] Commande NomService [NomOption= ValeurOption...]

 Paramètres
 NomServeur
Facultatif. Spécifie le nom du serveur lorsque vous souhaitez exécuter les commandes sur un ordinateur
distant. Le nom doit commencer par deux barres obliques inverses (par exemple, \\monserveur). Pour
exécuter Sc.exe sur l'ordinateur local, ne spécifiez pas ce paramètre.
 Commande
Spécifie la commande sc. Notez qu'un grand nombre des commandes sc requièrent des privilèges
d'administration sur l'ordinateur spécifié. Sc.exe prend en charge beaucoup de commandes en particulier :

Continue
Envoie une requête de contrôle Continue à un service.

Create
Crée un service (l'ajoute au Registre).

Delete
Supprime un service (du Registre).

15:35:56
Installation d’un service Windows
 Aide sur la commande Create de l’utilitaire SC

15:35:56
Installation d’un service Windows
 Création d’un service nommé «MonPremierServiceWindows» qui exécute le programme "C:\temp\
MonPremierServiceWindows.exe" avec un démarrage automatique.

 SC CREATE "MonPremierServiceWindows" binPath=" C:\temp\MonPremierServiceWindows.exe" START=


"auto"

15:35:56
Installation d’un service Windows
 Démarrage du service

15:35:56
Installation d’un service Windows
 Journal des événements

15:35:56

Vous aimerez peut-être aussi