Procédure pas à pas : création d'une application de service Windows dans le Concepteur de composants
Mise à jour : novembre 2007
Remarque : |
---|
Le modèle Service Windows et les fonctionnalités associées ne sont pas disponibles dans la version standard de Visual Studio. |
Les procédures de cette rubrique décrivent le processus de création d'une application de service Windows simple qui écrit des messages dans un journal des événements. La création et l'utilisation du service comportent plusieurs étapes de base :
Créez un projet à l'aide du modèle d'application Service Windows. Ce modèle crée une classe qui hérite de ServiceBase et écrit la majeure partie du code de base du service, notamment le code servant à démarrer le service.
Écrivez le code des procédures OnStart et OnStop, puis substituez toutes les autres méthodes que vous souhaitez redéfinir.
Ajoutez les programmes d'installation nécessaires à votre application de service. Par défaut, une classe contenant deux programmes d'installation ou plus est ajoutée à votre application lorsque vous cliquez sur le lien Ajouter le programme d'installation : l'un d'entre eux sert à installer le processus, tandis que le ou les autres programmes servent à installer chacun des services associés que comprend votre projet.
Générez votre projet.
Créez un projet d'installation pour installer votre service puis installez-le.
Accédez au Gestionnaire de contrôle des services Windows 2000 et démarrez votre service.
Pour commencer, créez votre projet et définissez les valeurs nécessaires au fonctionnement correct du service.
Remarque : |
---|
Il est possible que votre ordinateur affiche des noms ou des emplacements différents pour certains des éléments d'interface utilisateur Visual Studio dans les instructions suivantes. L'édition de Visual Studio dont vous disposez et les paramètres que vous utilisez déterminent ces éléments. Pour plus d'informations, consultez Paramètres Visual Studio. |
Création d'un service
Pour créer et configurer votre service
Dans le menu Fichier, cliquez sur Nouveau projet.
La boîte de dialogue Nouveau projet s'affiche.
Sélectionnez le projet Service Windows dans la liste des modèles de projet Visual Basic, Visual C#, Visual C++ ou Visual J#, puis appelez-le MyNewService. Cliquez sur OK.
Remarque : Le modèle de projet ajoute automatiquement une classe Component appelée Service1 qui hérite de System.ServiceProcess.ServiceBase.
Cliquez sur le concepteur pour sélectionner Service1. Ensuite, dans la fenêtre Propriétés, affectez à ServiceName et à la propriété (Name) pour Service1 la valeur MyNewService.
Affectez à la propriété AutoLog la valeur true.
Dans le menu Affichage, cliquez sur Code pour ouvrir l'éditeur de code. Modifiez la méthode Main pour créer une instance de MyNewService. Lorsque vous avez renommé le service dans l'étape 3, le nom de la classe n'a pas été modifié dans la méthode Main. Dans les applications Visual C# et Visual J#, la méthode Main se trouve respectivement dans les fichiers Program.cs et Program.js.
' To access the Main method in Visual Basic, select Main from the ' method name drop-down list. This expands the Component Designer ' generated code region. Shared Sub Main() Dim ServicesToRun() As System.ServiceProcess.ServiceBase ' Change the following line to match. ServicesToRun = New System.ServiceProcess.ServiceBase() _ {New MyNewService()} System.ServiceProcess.ServiceBase.Run(ServicesToRun) End Sub
static void Main() { System.ServiceProcess.ServiceBase[] ServicesToRun; // Change the following line to match. ServicesToRun = new System.ServiceProcess.ServiceBase[] { new MyNewService() }; System.ServiceProcess.ServiceBase.Run(ServicesToRun); }
public static void main(String[] args) { System.ServiceProcess.ServiceBase[] ServicesToRun; ServicesToRun = new System.ServiceProcess.ServiceBase[] { new MyNewService() }; System.ServiceProcess.ServiceBase.Run(ServicesToRun); }
Ajout de fonctionnalités au service
Dans la section suivante, vous ajoutez un journal des événements personnalisé au service Windows. 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. Pour plus d'informations sur les journaux des événements personnalisés, consultez Comment : créer et supprimer des journaux des événements personnalisés.
Pour ajouter une fonctionnalité de journal des événements personnalisé à votre service
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur Service1.vb, Service1.cs ou Service1.jsl, puis choisissez Concepteur de vues.
À partir de l'onglet Composants de la boîte à outils, faites glisser un composant EventLog jusqu'au concepteur.
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur Service1.vb, Service1.cs ou Service1.jsl, puis choisissez Afficher le code.
Modifiez le constructeur pour définir un journal des événements personnalisé.
' To access the constructor in Visual Basic, select New from the ' method name drop-down list. Public Sub New() MyBase.New() InitializeComponent() If Not System.Diagnostics.EventLog.SourceExists("MySource") Then System.Diagnostics.EventLog.CreateEventSource("MySource", _ "MyNewLog") End If EventLog1.Source = "MySource" EventLog1.Log = "MyNewLog" End Sub
public MyNewService() { InitializeComponent(); if (!System.Diagnostics.EventLog.SourceExists("MySource")) { System.Diagnostics.EventLog.CreateEventSource( "MySource","MyNewLog"); } eventLog1.Source = "MySource"; eventLog1.Log = "MyNewLog"; }
public MyNewService() { InitializeComponent(); if (!System.Diagnostics.EventLog.SourceExists("MySource")) { System.Diagnostics.EventLog.CreateEventSource( "MySource", "MyNewLog"); } eventLog1.set_Source("MySource"); eventLog1.set_Log("MyNewLog"); }
Pour définir les actions à effectuer lors du démarrage du service
Dans l'éditeur de code, recherchez la méthode OnStart qui a été automatiquement substituée lorsque vous avez créé le projet, puis écrivez le code requis pour définir les actions à exécuter au moment où le service démarre :
' To access the OnStart in Visual Basic, select OnStart from the ' method name drop-down list. Protected Overrides Sub OnStart(ByVal args() As String) EventLog1.WriteEntry("In OnStart") End Sub
protected override void OnStart(string[] args) { eventLog1.WriteEntry("In OnStart"); }
protected void OnStart(String[] args) { eventLog1.WriteEntry("In OnStart"); }
Remarque : Une application de service est conçue pour avoir une durée d'exécution longue. C'est la raison pour laquelle elle sert généralement à interroger ou à surveiller un des composants du système. La surveillance est configurée dans la méthode OnStart. Toutefois, la méthode OnStart n'effectue pas elle-même la surveillance. 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. Pour définir un mécanisme d'interrogation simple, vous pouvez utiliser le composant System.Timers.Timer. La méthode OnStart vous permet de définir des paramètres sur le composant, puis d'attribuer à la propriété Enabled la valeur true. La minuterie déclenche alors périodiquement des événements dans votre code, lesquels indiquent au service qu'il peut effectuer son analyse.
Pour définir les actions à effectuer lors de l'arrêt du service
Dans l'éditeur de code, sélectionnez la procédure OnStop de la liste déroulante Nom de la méthode, qui a été substituée automatiquement lorsque vous avez créé le projet. Écrivez un code pour déterminer ce qui se produit lorsque le service est arrêté :
Protected Overrides Sub OnStop() EventLog1.WriteEntry("In OnStop.") End Sub
protected override void OnStop() { eventLog1.WriteEntry("In onStop."); }
protected void OnStop() { eventLog1.WriteEntry("In onStop."); }
Vous pouvez également substituer les méthodes OnPause, OnContinue et OnShutdown afin de définir d'autres types de traitement pour votre composant.
Pour définir d'autres actions du service
Pour la méthode que vous souhaitez gérer, substituez la méthode appropriée et définissez les actions à exécuter.
Le code suivant illustre une substitution de la méthode OnContinue :
Protected Overrides Sub OnContinue() EventLog1.WriteEntry("In OnContinue.") End Sub
protected override void OnContinue() { eventLog1.WriteEntry("In OnContinue."); }
protected void OnContinue() { eventLog1.WriteEntry("In OnContinue."); }
Certaines actions personnalisées doivent être exécutées lors de l'installation d'un service Windows. À cette fin, il est possible de recourir à la classe Installer. Visual Studio peut créer ces programmes d'installation spécialement pour un service Windows et les ajouter à votre projet.
Pour créer les programmes d'installation de votre service
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur Service1.vb, Service1.cs ou Service1.jsl, puis choisissez Concepteur de vues.
Cliquez sur l'arrière-plan du concepteur pour sélectionner le service lui-même plutôt que son contenu.
Avec le concepteur dans le focus, cliquez avec le bouton droit, puis cliquez sur Ajouter le programme d'installation.
Par défaut, une classe Component comprenant deux programmes d'installation est ajoutée à votre projet. Le composant est appelé ProjectInstaller et contient le programme d'installation de votre service ainsi que le programme d'installation du processus associé au service.
En mode Design pour ProjectInstaller, cliquez sur ServiceInstaller1 ou sur serviceInstaller1.
Dans la fenêtre Propriétés, affectez MyNewService à la propriété ServiceName.
Dans le concepteur, cliquez sur ServiceProcessInstaller1 (pour un projet Visual Basic) ou serviceProcessInstaller1 (pour un projet Visual C# ou Visual J#). Affectez à la propriété Account la valeur LocalService. Le service sera ainsi installé et exécuté sous un compte de services local.
Note de sécurité : Le compte LocalService agit comme un utilisateur non privilégié sur l'ordinateur local et présente des informations d'identification anonymes à un serveur distant quelconque. Utilisez les autres comptes avec précaution, car ils disposent de privilèges plus importants, ce qui accroît le risque d'attaques par du code nuisible.
Pour générer votre projet de service
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le projet, puis cliquez sur Propriétés. Le Concepteur de propriétés du projet s'affiche.
Dans la liste Objet de démarrage de la page Application, cliquez sur MyNewService.
Appuyez sur CTRL+MAJ+B pour générer le projet.
À présent que le projet est généré, il peut être déployé. Un projet d'installation installera les fichiers projet compilés et exécutera les programmes d'installation requis pour exécuter le service Windows. Pour créer un projet d'installation complet, vous devrez ajouter la sortie de projet, MyNewService.exe, au projet d'installation puis une action personnalisée afin d'installer MyNewService.exe. Pour plus d'informations sur les projets d'installation, consultez Projets d'installation. Pour plus d'informations sur les actions personnalisées, consultez Procédure pas à pas : création d'une action personnalisée.
Pour créer un projet d'installation de votre service
Dans l'Explorateur de solutions, cliquez avec le bouton droit pour sélectionner votre solution, pointez sur Ajouter, puis cliquez sur Nouveau projet.
Dans le volet Types de projets, sélectionnez le dossier Projets d'installation et de déploiement.
Dans le volet Modèles, sélectionnez Projet d'installation. Appelez le projet MyServiceSetup. Cliquez sur OK.
Un projet d'installation est ajouté à la solution.
Ensuite, ajoutez la sortie du projet de service Windows, MyNewService.exe, à la configuration.
Pour ajouter MyNewService.exe au projet d'installation
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur MyServiceSetup, pointez sur Ajouter, puis cliquez sur Sortie du projet.
La boîte de dialogue Ajouter le groupe de sorties du projet apparaît.
MyNewService est sélectionné dans la zone Projet.
Dans la liste, sélectionnez Sortie principale, puis cliquez sur OK.
Un élément de projet pour la sortie principale de MyNewService est ajouté au projet d'installation.
Ajoutez à présent une action personnalisée afin d'installer le fichier MyNewService.exe.
Pour ajouter une action personnalisée au projet d'installation
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur votre projet d'installation, pointez sur Affichage, puis cliquez sur Actions personnalisées.
L'éditeur Actions personnalisées s'affiche.
Dans l'éditeur des actions personnalisées, cliquez avec le bouton droit sur le nœud Actions personnalisées et cliquez sur Ajouter une action personnalisée.
La boîte de dialogue Sélectionner un élément dans le projet s'affiche.
Double-cliquez sur Dossier d'application dans la liste pour l'ouvrir, sélectionnez Sortie principale de MyNewService (Actif), puis cliquez sur OK.
La sortie principale est ajoutée aux quatre nœuds des actions personnalisées, Installer, Valider, Restaurer et Désinstaller.
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le projet MyServiceSetup, puis cliquez sur Générer.
Pour installer le service Windows
Pour installer MyNewService.exe, dans l'Explorateur de solutions, cliquez avec le bouton droit sur le projet d'installation, puis choisissez Installer.
Suivez les étapes de l'Assistant Installation. Générez et enregistrez votre solution.
Pour démarrer et arrêter le service
Ouvrez le Gestionnaire de contrôle des services par l'une ou l'autre des méthodes suivantes :
Dans Windows XP et 2000 Professionnel, cliquez avec le bouton droit sur Poste de travail sur le Bureau, puis cliquez sur Gérer. Dans la console Gestion de l'ordinateur, développez le nœud Services et applications.
- ou -
Dans Windows 2000 Server et Windows Server 2003, cliquez sur Démarrer, pointez sur Programmes, cliquez sur Outils d'administration, puis sur Services.
Remarque : Dans Windows NT version 4.0, ouvrez cette boîte de dialogue à partir du Panneau de configuration.
MyNewService devrait maintenant apparaître dans la liste affichée dans la section Services de la fenêtre.
Sélectionnez votre service dans la liste, cliquez dessus avec le bouton droit, puis cliquez sur Démarrer.
Cliquez avec le bouton droit sur le service, puis cliquez sur Arrêter.
Pour vérifier la sortie du journal des événements de votre service
Ouvrez l'Explorateur de serveurs et accédez au nœud Journaux des événements. Pour plus d'informations, consultez Comment : utiliser des journaux des événements dans l'Explorateur de serveurs.
Remarque : Le modèle Service Windows et les fonctionnalités associées ne sont pas disponibles dans la version standard de Visual Studio.
Recherchez la liste associée à MyNewLog et développez-la. Vous devriez voir des entrées relatives aux actions exécutées par votre service.
Pour désinstaller votre service
Dans le menu Démarrer, ouvrez le Panneau de configuration, puis cliquez sur Ajout/suppression de programmes. Recherchez votre service et cliquez sur Désinstaller.
Vous pouvez également désinstaller le programme en cliquant avec le bouton droit sur l'icône de programme du fichier .msi et en sélectionnant Désinstaller.
Remarque : Si vous avez installé le service sur Windows 2000, vous devez redémarrer le système pour pouvoir le réinstaller. Sur Windows 2000, les services ne sont complètement supprimés qu'après redémarrage du système.
Étapes suivantes
Vous pouvez également opter pour l'utilisation d'un composant ServiceController qui vous permet d'envoyer des commandes au service que vous avez installé. Pour plus d'informations sur l'utilisation du composant ServiceController, consultez Surveillance des services Windows.
Vous pouvez utiliser un programme d'installation pour créer un journal des événements lors de l'installation de l'application plutôt que lors de son exécution. En outre, le journal des événements sera supprimé par le programme d'installation lors de la désinstallation de l'application. Pour plus d'informations, consultez Procédure pas à pas : installation d'un composant EventLog.
Voir aussi
Tâches
Comment : ajouter des programmes d'installation à votre application de service
Comment : installer et désinstaller des services
Comment : déboguer les applications de service Windows
Comment : lancer l'Observateur d'événements à partir de l'Explorateur de serveurs
Concepts
Introduction aux applications de service Windows
Référence
Comment : accéder à l'Explorateur de serveurs/bases de données et l'initialiser