1. Créer un nouveau projet de service Windows
- Ouvrez Visual Studio et créez un nouveau projet
- Sélectionnez le modèle : Visual C# → Windows → Service Windows
- 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 :
- Program.cs : point d’entrée de l’application
- 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étierOnStop: 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
- Sur la vue concepteur de
Service1, faites un clic droit → Ajouter un programme d’installation - Visual Studio génère automatiquement
ProjectInstaller.csqui contient deux composants essentiels :serviceInstaller1serviceProcessInstaller1

Configuration des propriétés des composants
- serviceInstaller1 (configuration des informations du service)
ServiceName: nom interne du service (identifiant dans le code)DisplayName: nom affiché dans le gestionnaire de servicesDescription: description du serviceStartType: type de démarrageManual(Manuel)/Automatic(Automatique)
- serviceProcessInstaller1 (configuration du compte d’exécution)
Account: identité d’exécutionLocalSystem: 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
- Compilez le projet pour obtenir le fichier
WindowsServiceDemo.exe - 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)
- 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
- 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. - Problèmes de chemins : les chemins relatifs ne fonctionnent pas, préférez les chemins absolus.
- Problèmes de permissions : le compte d’exécution détermine les accès au disque, au réseau et aux dossiers partagés.
- Délai d’expiration au démarrage : un blocage prolongé dans
OnStartfait considérer le démarrage comme échoué par le système. Confiez les traitements longs à un nouveau thread.
Votre premier Windows Service