Architecture de programmation d'une application de service

Remarque

Cet article ne s’applique pas aux services hébergés dans .NET. Pour obtenir le contenu des services Windows utilisant Microsoft.Extensions.Hosting.BackgroundService et le modèle Service Worker le plus récent, consultez :

Les applications de service Windows sont basées sur une classe qui hérite de la classe System.ServiceProcess.ServiceBase. Substituez les méthodes de cette classe et définissez des fonctionnalités pour qu’elles déterminent le comportement de votre service.

Les principales classes impliquées dans la création du service sont les suivantes :

Par ailleurs, vous pouvez utiliser une classe nommée ServiceController pour manipuler le service. Cette classe n’est pas impliquée dans la création d’un service, mais vous pouvez vous en servir pour démarrer et arrêter le service, lui passer des commandes et retourner une série d’énumérations.

Définition du comportement de votre service

Dans votre classe de service, substituez les fonctions de classe de base qui déterminent ce qui se passe en cas de changement de l’état de votre service dans le Gestionnaire de contrôle des services. La classe ServiceBase expose les méthodes suivantes, que vous pouvez substituer pour ajouter un comportement personnalisé.

Méthode Substituer pour
OnStart Indiquer les actions à effectuer quand votre service commence à s’exécuter. Vous devez écrire du code dans cette procédure pour que votre service effectue des tâches utiles.
OnPause Indiquer ce qui doit se passer quand votre service est suspendu.
OnStop Indiquer ce qui doit se passer quand votre service arrête de s’exécuter.
OnContinue Indiquer ce qui doit se passer quand votre service revient à son fonctionnement normal après avoir été suspendu.
OnShutdown Indiquer ce qui doit se passer juste avant l’arrêt de votre système si votre service est en cours d’exécution à ce moment-là.
OnCustomCommand Indiquer ce qui doit se passer quand votre service reçoit une commande personnalisée. Pour plus d’informations sur les commandes personnalisées, consultez MSDN Online.
OnPowerEvent Indiquer comment le service doit répondre à la suite d’un événement de gestion de l’alimentation (batterie faible, opération suspendue, etc.).

Notes

Ces méthodes représentent les états par lesquels passe le service au cours de sa vie (le service passe d’un état à l’autre). Par exemple, le service ne répond jamais à une commande OnContinue avant un appel à OnStart.

D’autres propriétés et méthodes présentent un intérêt. Il s’agit notamment des paramètres suivants :

  • La méthode Run sur la classe ServiceBase. Il s’agit du point d’entrée principal du service. Quand vous créez un service à l’aide du modèle de service Windows, le code est inséré dans la méthode Main de votre application pour exécuter le service. Ce code ressemble à ceci :

    ServiceBase[] ServicesToRun;
    ServicesToRun = new ServiceBase[]
        { new Service1() };
    Run(ServicesToRun);
    
    Dim ServicesToRun() As System.ServiceProcess.ServiceBase
    ServicesToRun =
        New System.ServiceProcess.ServiceBase() {New Service1()}
    System.ServiceProcess.ServiceBase.Run(ServicesToRun)
    

    Notes

    Ces exemples utilisent un tableau de type ServiceBase, dans lequel chaque service contenu dans votre application peut être ajouté. Tous les services peuvent ensuite être exécutés ensemble. Toutefois, si vous ne créez qu’un seul service, vous pouvez choisir de ne pas utiliser le tableau. Dans ce cas, déclarez simplement un nouvel objet héritant de ServiceBase et exécutez-le. Pour obtenir un exemple, consultez Guide pratique pour écrire des services par programmation.

  • Une série de propriétés sur la classe ServiceBase. Celles-ci déterminent les méthodes qui peuvent être appelées sur votre service. Par exemple, quand la propriété CanStop a la valeur true, la méthode OnStop sur votre service peut être appelée. Quand la propriété CanPauseAndContinue a la valeur true, les méthodes OnPause et OnContinue peuvent être appelées. Si vous définissez l’une de ces propriétés avec la valeur true, vous devez ensuite remplacer et définir le traitement des méthodes associées.

    Notes

    Pour être utile, votre service doit substituer au moins OnStart et OnStop.

Vous pouvez également utiliser un composant appelé ServiceController pour communiquer avec un service existant et contrôler son comportement.

Voir aussi