Votre premier Windows Service

1. Créer un nouveau projet de service Windows

  1. Ouvrez Visual Studio et créez un nouveau projet
  2. Sélectionnez le modèle : Visual C# → Windows → Service Windows
  3. Définissez le nom du projet et le chemin d’enregistrement, puis cliquez sur OK

Remarque : les versions récentes de Visual Studio n’incluent plus ce modèle. Il n’est pris en charge que par .NET Framework. Pour .NET Core/.NET 5+, il est recommandé d’utiliser Worker Service.

2. Présentation de la structure du projet

Fichiers clés générés automatiquement :

  1. Program.cs : point d’entrée de l’application
  2. Service1.cs : classe contenant la logique principale du service
1. Code du point d’entrée Program.cs
static class Program
{
    static void Main()
    {
        ServiceBase[] ServicesToRun;
        ServicesToRun = new ServiceBase[]
        {
            new Service1()
        };
        ServiceBase.Run(ServicesToRun);
    }
}Langage du code : JavaScript (javascript)

Rôle : démarre l’hôte de service et charge une ou plusieurs instances de service.

2. Classe principale du service Service1.cs
public partial class Service1 : ServiceBase
{
    public Service1()
    {
        InitializeComponent();
    }

    // Exécuté au démarrage du service
    protected override void OnStart(string[] args)
    {

    }

    // Exécuté à l’arrêt du service
    protected override void OnStop()
    {

    }
}
  • OnStart : déclenché au démarrage du service, placez‑y votre logique métier
  • OnStop : déclenché à l’arrêt du service, utilisé pour libérer les ressources

3. Ajouter le programme d’installation

Cette étape est obligatoire ! Sans cela, vous ne pouvez pas enregistrer le service dans le système.

Étapes de réalisation
  1. Sur la vue concepteur de Service1, faites un clic droit → Ajouter un programme d’installation
  2. Visual Studio génère automatiquement ProjectInstaller.cs qui contient deux composants essentiels :
    • serviceInstaller1
    • serviceProcessInstaller1

Configuration des propriétés des composants

  1. serviceInstaller1 (configuration des informations du service)
    • ServiceName : nom interne du service (identifiant dans le code)
    • DisplayName : nom affiché dans le gestionnaire de services
    • Description : description du service
    • StartType : type de démarrage Manual(Manuel)/Automatic(Automatique)
  2. serviceProcessInstaller1 (configuration du compte d’exécution)
    • Account : identité d’exécution
    • LocalSystem : compte système local (privilèges les plus élevés, recommandé pour les tests)
    • User : compte Windows personnalisé (valeur par défaut, nécessite nom d’utilisateur et mot de passe)

4. Écrire une logique métier de test

Tout le traitement métier se place dans la classe Service1. Vous pouvez y intégrer votre propre logique. Pour vérifier le bon fonctionnement, nous utilisons temporairement une sortie de journal. Les services sont difficiles à déboguer et nécessitent une installation et une désinstallation.

Modifiez Service1.cs

using System.IO;

protected override void OnStart(string[] args)
{
    // Écriture du journal au démarrage
    File.AppendAllText("log.txt", "Heure de démarrage : " + DateTime.Now + Environment.NewLine);
}

protected override void OnStop()
{
    // Écriture du journal à l’arrêt
    File.AppendAllText("log.txt", "Heure d’arrêt : " + DateTime.Now + Environment.NewLine);
}Langage du code : JavaScript (javascript)

5. Compiler, installer et démarrer le service

  1. Compilez le projet pour obtenir le fichier WindowsServiceDemo.exe
  2. Enregistrez le service avec InstallUtil.exe (invite de commande en mode administrateur)
# Installer le service
InstallUtil.exe WindowsServiceDemo.exe

# Désinstaller le service
InstallUtil.exe /u WindowsServiceDemo.exeLangage du code : PHP (php)
  1. Ouvrez le gestionnaire de services avec services.msc, retrouvez votre service, démarrez‑le ou arrêtez‑le puis consultez le fichier journal.

Un service ne peut pas s’exécuter ou se déboguer comme un programme classique. Il doit être installé au moyen d’outils dédiés.

Points importants

  1. Impossible de déboguer directement avec F5 : les services Windows ne prennent pas en charge le débogage direct. Solution recommandée :
    implémentez un double mode ; exécution en tant qu’application console en ligne de commande, exécution en tant que service après installation.
  2. Problèmes de chemins : les chemins relatifs ne fonctionnent pas, préférez les chemins absolus.
  3. Problèmes de permissions : le compte d’exécution détermine les accès au disque, au réseau et aux dossiers partagés.
  4. Délai d’expiration au démarrage : un blocage prolongé dans OnStart fait considérer le démarrage comme échoué par le système. Confiez les traitements longs à un nouveau thread.

Votre premier Windows Service

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *