Introduction aux applications de service Windows
Les services Microsoft Windows, précédemment appelés « services NT », vous permettent de créer des applications à durée d'exécution longue s'exécutant dans leurs propres sessions Windows. Ces services peuvent être automatiquement démarrés en même temps que l'ordinateur, suspendus puis redémarrés et ne présentent pas d'interface utilisateur. Ces fonctionnalités rendent ces services parfaitement adaptés à une utilisation sur un serveur ou lorsque vous avez besoin d'une fonctionnalité à période d'activité longue n'interférant pas avec les autres utilisateurs travaillant sur le même ordinateur. Vous pouvez également exécuter des services dans le contexte de sécurité d'un compte d'utilisateur particulier, autre que celui de l'utilisateur connecté ou de l'ordinateur par défaut. Pour plus d'informations sur les services et sessions Windows, consultez la documentation du kit de développement Platform SDK dans MSDN Library.
Notes
Le modèle de service Windows et les fonctionnalités associées ne sont pas disponibles dans l'édition standard de Visual Studio.
Vous pouvez aisément concevoir des services en créant une application que vous installerez en tant que service. Supposons que vous souhaitez surveiller le compteur de performance et réagir au dépassement de certains seuils. Vous pouvez écrire une application de service Windows surveillant ce compteur, la déployer et commencer à collecter et à analyser des données.
Créez votre service en tant que projet Microsoft Visual Studio et définissez-y du code contrôlant les commandes pouvant être envoyées au service et les actions à effectuer lors de la réception de ces commandes. Les commandes pouvant être envoyées sont celles qui déclenchent le démarrage, l'interruption, le redémarrage et l'arrêt du service, ainsi que celles qui déclenchent l'exécution de commandes personnalisées.
Une fois l'application générée, vous pouvez l'installer en exécutant l'utilitaire en ligne de commande InstallUtil.exe et en transmettant le chemin d'accès au fichier exécutable du service, ou en utilisant les fonctionnalités de déploiement de Visual Studio. Vous pouvez ensuite utiliser le Gestionnaire de contrôle des services pour démarrer, arrêter, interrompre, redémarrer et configurer le service. Vous pouvez également effectuer un grand nombre de ces tâches dans le nœud Services de l'Explorateur de serveurs, ou en faisant appel à la classe ServiceController.
Différences entre les applications de service etles autres applications Visual Studio
Les applications de service présentent, par rapport à beaucoup d'autres types de projets, les différences de fonctionnement suivantes :
Le fichier exécutable compilé qui est créé par un projet d'application de service doit être installé sur le serveur pour que le projet puisse fonctionner correctement. Vous ne pouvez ni déboguer ni exécuter une application de service en appuyant sur F5 ou F11 ; vous ne pouvez ni exécuter un service, ni entrer dans son code de manière immédiate. Vous devez d'abord installer et démarrer le service, puis attacher un débogueur à son processus. Pour plus d'informations, consultez Comment : déboguer les applications de service Windows.
À la différence de certains types de projets, les applications de service imposent de créer des composants d'installation. Ces composants installent et inscrivent le service sur le serveur et créent pour lui une entrée dans le Gestionnaire de contrôle des services Windows. Pour plus d'informations, consultez Comment : ajouter des programmes d'installation à votre application de service.
La méthode Main de votre application de service doit émettre la commande Run pour les services contenus dans votre projet. La méthode Run charge les services dans le Gestionnaire de contrôle des services du serveur approprié. Si vous utilisez le modèle de projet Services Windows, cette méthode est automatiquement générée pour vous. Notez que le chargement et le démarrage d'un service sont deux choses différentes. Pour plus d'informations, consultez la section « Durée de vie d'un service » ci-dessous.
Les applications de service Windows s'exécutent sur une station Windows autre que la station interactive de l'utilisateur connecté. Une station Windows est un objet sécurisé comprenant un Presse-papiers, un ensemble d'atomes globaux et un groupe d'objets desktop. La station du service Windows n'étant pas une station interactive, les boîtes de dialogue appelées à partir d'une application de service Windows ne sont pas visibles et peuvent provoquer un blocage du programme. De même, les messages d'erreur doivent être enregistrés dans le journal des événements Windows plutôt qu'affichés dans l'interface utilisateur.
Les classes de service Windows prises en charge par le .NET Framework ne prennent pas en charge l'interaction avec les stations interactives (c'est-à-dire l'utilisateur connecté). Le .NET Framework n'inclut pas non plus de classe représentant les stations et les bureaux. Si votre service Windows doit interagir avec d'autres stations, vous devez accéder à l'interface API Windows non managée. Pour plus d'informations, consultez la documentation du Kit de développement Platform SDK.
L'interaction du service Windows avec la station de l'utilisateur ou d'autres stations doit être conçue correctement de façon à inclure des scénarios tels que l'absence d'utilisateur connecté ou la présence d'un ensemble d'objets desktop inattendu. Dans certains cas, il est préférable d'écrire une application Windows s'exécutant sous le contrôle de l'utilisateur.
Les applications de service Windows s'exécutent dans leur propre contexte de sécurité et démarrent avant que l'utilisateur ne se connecte à l'ordinateur Windows sur lequel elles sont installées. Vous devez sélectionner avec soin le compte d'utilisateur dans lequel s'exécutera le service ; un service s'exécutant dans le compte système dispose de plus de droits et de privilèges qu'un compte d'utilisateur.
Durée de vie d'un service
Un service passe par différents stades pendant son cycle de vie. D'abord, il est installé dans le système sur lequel il s'exécutera. Ce processus exécute les programmes d'installation du projet de service et charge le service dans le Gestionnaire de contrôle des services de cet ordinateur. Le Gestionnaire de contrôle des services est l'utilitaire central fourni par Windows pour l'administration des services.
Une fois le service chargé, il doit être démarré. Le démarrage est une condition préalable indispensable à la mise en fonction du service. Vous pouvez démarrer un service à partir du Gestionnaire de contrôle des services, de l'Explorateur de serveurs ou du code en appelant la méthode Start. La méthode Start transmet le traitement à la méthode OnStart de l'application et exécute le code que vous y avez défini.
Un service en exécution peut rester dans cet état jusqu'à ce qu'il soit arrêté ou suspendu ou jusqu'à ce que l'ordinateur soit lui-même arrêté. Un service peut prendre les trois états de base suivants : Running, Paused ou Stopped. Le service peut également signaler l'état d'une commande en attente : ContinuePending, PausePending, StartPending ou StopPending. Ces états indiquent qu'une commande a été émise, par exemple une commande de suspension d'un service, mais qu'elle n'a pas encore été exécutée. Vous pouvez interroger Status pour connaître l'état d'un service ou utiliser WaitForStatus pour effectuer une action lorsque l'un ou l'autre de ces états se manifeste.
Vous pouvez suspendre, arrêter ou redémarrer un service à partir du Gestionnaire de contrôle des services, de l'Explorateur de serveurs ou en appelant des méthodes dans le code. Chacune de ces actions peut appeler une procédure associée du service (OnStop, OnPause ou OnContinue), dans laquelle vous pouvez définir un traitement supplémentaire qui s'effectue lorsque le service change d'état.
Types de services
Dans Visual Studio, le .NET Framework permet de créer deux types de services. Les services qui constituent le seul service d'un processus prennent le type Win32OwnProcess. Les services qui partagent un processus prennent le type Win32ShareProcess. Vous pouvez récupérer le type d'un service en interrogeant la propriété ServiceType.
Vous pouvez parfois rencontrer d'autres types de services lorsque vous interrogez des services existants qui n'ont pas été créés dans Visual Studio. Pour plus d'informations sur ce point, consultez ServiceType.
Services et composant ServiceController
Le composant ServiceController permet de se connecter à un service installé et de manipuler son état ; en utilisant un composant ServiceController, vous pouvez démarrer et arrêter un service, suspendre et poursuivre son exécution, et lui envoyer des commandes personnalisées. Toutefois, vous n'avez pas besoin d'utiliser un composant ServiceController lorsque vous créez une application de service. En fait, dans la plupart des cas, votre composant ServiceController doit se trouver dans une application séparée de l'application de service Windows définissant votre service.
Pour plus d'informations, consultez ServiceController.
Déploiement et installation de services
Visual Studio vous est fourni avec des composants qui vous permettent d'installer les ressources associées à vos applications de service. Les composants d'installation inscrivent chaque service dans le système sur lequel il doit être installé et avertissent le Gestionnaire de contrôle des services de son existence.
Une fois les programmes d'installation ajoutés à l'application, la prochaine étape consiste à créer un projet d'installation qui va installer les fichiers projets compilés et exécuter les programmes d'installation requis pour installer votre service. Pour créer un projet d'installation complet, vous devez ajouter la sortie du projet de service au projet d'installation, puis une action personnalisée afin d'installer le service. Pour plus d'informations sur les projets d'installation, consultez Projets d'installation et de déploiement. Pour plus d'informations sur les actions personnalisées, consultez Procédure pas à pas : création d'une action personnalisée.
Configuration requise
Les services doivent être créés dans un projet d'application Service Windows ou dans un autre projet compatible .NET Framework qui génère un fichier .exe lorsqu'il est constitué et qui hérite de la classe ServiceBase.
Les projets qui contiennent des services Windows doivent disposer de composants d'installation destinés au projet et à ses services. Cela peut aisément être accompli à partir de la fenêtre Propriétés. Pour plus d'informations, consultez Comment : ajouter des programmes d'installation à votre application de service.
Voir aussi
Tâches
Comment : créer des services Windows
Comment : installer et désinstaller des services
Comment : démarrer des services
Comment : déboguer les applications de service Windows
Procédure pas à pas : création d'une application de service Windows dans le Concepteur de composants
Comment : ajouter des programmes d'installation à votre application de service
Procédure pas à pas : création d'une action personnalisée
Concepts
Architecture de programmation d'une application de service
Projets d'installation et de déploiement