Partager via


ServiceController Classe

Définition

Représente un service Windows et vous permet de vous connecter à un service en cours d'exécution ou arrêté, de le manipuler ou d'obtenir des informations le concernant.

public ref class ServiceController : System::ComponentModel::Component
public ref class ServiceController : IDisposable
public class ServiceController : System.ComponentModel.Component
public class ServiceController : IDisposable
[System.ServiceProcess.ServiceProcessDescription("ServiceControllerDesc")]
public class ServiceController : System.ComponentModel.Component
type ServiceController = class
    inherit Component
type ServiceController = class
    interface IDisposable
[<System.ServiceProcess.ServiceProcessDescription("ServiceControllerDesc")>]
type ServiceController = class
    inherit Component
Public Class ServiceController
Inherits Component
Public Class ServiceController
Implements IDisposable
Héritage
ServiceController
Héritage
ServiceController
Attributs
Implémente

Exemples

L’exemple suivant illustre l’utilisation de la ServiceController classe pour contrôler l’exemple de SimpleService service.

using System;
using System.ServiceProcess;
using System.Diagnostics;
using System.Threading;

namespace ServiceControllerSample
{
    class Program
    {
        public enum SimpleServiceCustomCommands
        { StopWorker = 128, RestartWorker, CheckWorker };
        static void Main(string[] args)
        {
            ServiceController[] scServices;
            scServices = ServiceController.GetServices();

            foreach (ServiceController scTemp in scServices)
            {

                if (scTemp.ServiceName == "Simple Service")
                {
                    // Display properties for the Simple Service sample
                    // from the ServiceBase example.
                    ServiceController sc = new ServiceController("Simple Service");
                    Console.WriteLine("Status = " + sc.Status);
                    Console.WriteLine("Can Pause and Continue = " + sc.CanPauseAndContinue);
                    Console.WriteLine("Can ShutDown = " + sc.CanShutdown);
                    Console.WriteLine("Can Stop = " + sc.CanStop);
                    if (sc.Status == ServiceControllerStatus.Stopped)
                    {
                        sc.Start();
                        while (sc.Status == ServiceControllerStatus.Stopped)
                        {
                            Thread.Sleep(1000);
                            sc.Refresh();
                        }
                    }
                    // Issue custom commands to the service
                    // enum SimpleServiceCustomCommands
                    //    { StopWorker = 128, RestartWorker, CheckWorker };
                    sc.ExecuteCommand((int)SimpleServiceCustomCommands.StopWorker);
                    sc.ExecuteCommand((int)SimpleServiceCustomCommands.RestartWorker);
                    sc.Pause();
                    while (sc.Status != ServiceControllerStatus.Paused)
                    {
                        Thread.Sleep(1000);
                        sc.Refresh();
                    }
                    Console.WriteLine("Status = " + sc.Status);
                    sc.Continue();
                    while (sc.Status == ServiceControllerStatus.Paused)
                    {
                        Thread.Sleep(1000);
                        sc.Refresh();
                    }
                    Console.WriteLine("Status = " + sc.Status);
                    sc.Stop();
                    while (sc.Status != ServiceControllerStatus.Stopped)
                    {
                        Thread.Sleep(1000);
                        sc.Refresh();
                    }
                    Console.WriteLine("Status = " + sc.Status);
                    String[] argArray = new string[] { "ServiceController arg1", "ServiceController arg2" };
                    sc.Start(argArray);
                    while (sc.Status == ServiceControllerStatus.Stopped)
                    {
                        Thread.Sleep(1000);
                        sc.Refresh();
                    }
                    Console.WriteLine("Status = " + sc.Status);
                    // Display the event log entries for the custom commands
                    // and the start arguments.
                    EventLog el = new EventLog("Application");
                    EventLogEntryCollection elec = el.Entries;
                    foreach (EventLogEntry ele in elec)
                    {
                        if (ele.Source.IndexOf("SimpleService.OnCustomCommand") >= 0 |
                            ele.Source.IndexOf("SimpleService.Arguments") >= 0)
                            Console.WriteLine(ele.Message);
                    }
                }
            }
        }
    }
}
// This sample displays the following output if the Simple Service
// sample is running:
//Status = Running
//Can Pause and Continue = True
//Can ShutDown = True
//Can Stop = True
//Status = Paused
//Status = Running
//Status = Stopped
//Status = Running
//4:14:49 PM - Custom command received: 128
//4:14:49 PM - Custom command received: 129
//ServiceController arg1
//ServiceController arg2
Imports System.ServiceProcess
Imports System.Diagnostics
Imports System.Threading



Class Program

    Public Enum SimpleServiceCustomCommands
        StopWorker = 128
        RestartWorker
        CheckWorker
    End Enum 'SimpleServiceCustomCommands

    Shared Sub Main(ByVal args() As String)
        Dim scServices() As ServiceController
        scServices = ServiceController.GetServices()

        Dim scTemp As ServiceController
        For Each scTemp In scServices

            If scTemp.ServiceName = "Simple Service" Then
                ' Display properties for the Simple Service sample 
                ' from the ServiceBase example
                Dim sc As New ServiceController("Simple Service")
                Console.WriteLine("Status = " + sc.Status.ToString())
                Console.WriteLine("Can Pause and Continue = " + _
                    sc.CanPauseAndContinue.ToString())
                Console.WriteLine("Can ShutDown = " + sc.CanShutdown.ToString())
                Console.WriteLine("Can Stop = " + sc.CanStop.ToString())
                If sc.Status = ServiceControllerStatus.Stopped Then
                    sc.Start()
                    While sc.Status = ServiceControllerStatus.Stopped
                        Thread.Sleep(1000)
                        sc.Refresh()
                    End While
                End If
                ' Issue custom commands to the service
                ' enum SimpleServiceCustomCommands 
                '    { StopWorker = 128, RestartWorker, CheckWorker };
                sc.ExecuteCommand(Fix(SimpleServiceCustomCommands.StopWorker))
                sc.ExecuteCommand(Fix(SimpleServiceCustomCommands.RestartWorker))
                sc.Pause()
                While sc.Status <> ServiceControllerStatus.Paused
                    Thread.Sleep(1000)
                    sc.Refresh()
                End While
                Console.WriteLine("Status = " + sc.Status.ToString())
                sc.Continue()
                While sc.Status = ServiceControllerStatus.Paused
                    Thread.Sleep(1000)
                    sc.Refresh()
                End While
                Console.WriteLine("Status = " + sc.Status.ToString())
                sc.Stop()
                While sc.Status <> ServiceControllerStatus.Stopped
                    Thread.Sleep(1000)
                    sc.Refresh()
                End While
                Console.WriteLine("Status = " + sc.Status.ToString())
                Dim argArray() As String = {"ServiceController arg1", "ServiceController arg2"}
                sc.Start(argArray)
                While sc.Status = ServiceControllerStatus.Stopped
                    Thread.Sleep(1000)
                    sc.Refresh()
                End While
                Console.WriteLine("Status = " + sc.Status.ToString())
                ' Display the event log entries for the custom commands
                ' and the start arguments.
                Dim el As New EventLog("Application")
                Dim elec As EventLogEntryCollection = el.Entries
                Dim ele As EventLogEntry
                For Each ele In elec
                    If ele.Source.IndexOf("SimpleService.OnCustomCommand") >= 0 Or ele.Source.IndexOf("SimpleService.Arguments") >= 0 Then
                        Console.WriteLine(ele.Message)
                    End If
                Next ele
            End If
        Next scTemp

    End Sub
End Class
' This sample displays the following output if the Simple Service
' sample is running:
'Status = Running
'Can Pause and Continue = True
'Can ShutDown = True
'Can Stop = True
'Status = Paused
'Status = Running
'Status = Stopped
'Status = Running
'4:14:49 PM - Custom command received: 128
'4:14:49 PM - Custom command received: 129
'ServiceController arg1
'ServiceController arg2

Remarques

Vous pouvez utiliser la ServiceController classe pour vous connecter et contrôler le comportement des services existants. Lorsque vous créez une instance de la ServiceController classe, vous définissez ses propriétés afin qu’elle interagit avec un service Windows spécifique. Vous pouvez ensuite utiliser la classe pour démarrer, arrêter et manipuler le service.

Vous utiliserez probablement le ServiceController composant dans une capacité d’administration. Par exemple, vous pouvez créer une application Windows ou web qui envoie des commandes personnalisées à un service via l’instance ServiceController . Cela serait utile, car le composant logiciel enfichable SCM (Service Control Manager) Microsoft Management Console ne prend pas en charge les commandes personnalisées.

Après avoir créé une instance de ServiceController, vous devez définir deux propriétés sur celle-ci pour identifier le service avec lequel elle interagit : le nom de l’ordinateur et le nom du service que vous souhaitez contrôler.

Notes

Par défaut, MachineName étant défini sur l’ordinateur local, vous n’avez pas besoin de le modifier, sauf si vous souhaitez définir l’instance pour qu’elle pointe vers un autre ordinateur.

En règle générale, l’auteur du service écrit du code qui personnalise l’action associée à une commande spécifique. Par exemple, un service peut contenir du code pour répondre à une ServiceBase.OnPause commande. Dans ce cas, le traitement personnalisé de la Pause tâche s’exécute avant que le système interrompe le service.

L’ensemble de commandes qu’un service peut traiter dépend de ses propriétés ; par exemple, vous pouvez définir la propriété d’un CanStop service sur false. Ce paramètre rend la Stop commande indisponible sur ce service particulier ; il vous empêche d’arrêter le service à partir du SCM en désactivant le bouton nécessaire. Si vous essayez d’arrêter le service de votre code, le système génère une erreur et affiche le message d’erreur « Échec de l’arrêt servicename».

Constructeurs

ServiceController()

Initialise une nouvelle instance de la classe ServiceController qui n'est pas associée à un service spécifique.

ServiceController(String)

Initialise une nouvelle instance de la classe ServiceController qui est associée à un service existant sur l'ordinateur local.

ServiceController(String, String)

Initialise une nouvelle instance de la classe ServiceController qui est associée à un service existant sur l'ordinateur spécifié.

Propriétés

CanPauseAndContinue

Obtient une valeur indiquant s'il est possible de suspendre et de reprendre le service.

CanRaiseEvents

Obtient une valeur qui indique si le composant peut déclencher un événement.

(Hérité de Component)
CanShutdown

Obtient une valeur indiquant si le service doit être averti de l'arrêt du système.

CanStop

Obtient une valeur indiquant si le service peut être arrêté après avoir démarré.

Container

Obtient le IContainer qui contient la Component.

(Hérité de Component)
DependentServices

Obtient le jeu de services qui dépend du service associé à cette instance de ServiceController.

DesignMode

Obtient une valeur qui indique si Component est actuellement en mode design.

(Hérité de Component)
DisplayName

Obtient ou définit un nom convivial pour le service.

Events

Obtient la liste des gestionnaires d'événements attachés à ce Component.

(Hérité de Component)
MachineName

Obtient ou définit le nom de l'ordinateur sur lequel ce service réside.

ServiceHandle

Obtient le handle du service.

ServiceName

Obtient ou définit le nom qui identifie le service référencé par cette instance.

ServicesDependedOn

Jeu de services dont ce service dépend.

ServiceType

Obtient le type de service auquel cet objet fait référence.

Site

Obtient ou définit le ISite de Component.

(Hérité de Component)
StartType

Obtient une valeur qui indique comment le service représenté par l'objet ServiceController démarre.

Status

Obtient l'état du service auquel cette instance fait référence.

Méthodes

Close()

Déconnecte cette instance de ServiceController du service et libère toutes les ressources que l'instance a allouées.

Continue()

Continue un service après qu'il a été suspendu.

CreateObjRef(Type)

Crée un objet contenant toutes les informations appropriées requises pour générer un proxy permettant de communiquer avec un objet distant.

(Hérité de MarshalByRefObject)
Dispose()

Exécute les tâches définies par l'application associées à la libération ou à la redéfinition des ressources non managées.

Dispose()

Libère toutes les ressources utilisées par Component.

(Hérité de Component)
Dispose(Boolean)

Libère les ressources non managées utilisées par ServiceController et libère éventuellement les ressources managées.

Equals(Object)

Détermine si l'objet spécifié est égal à l'objet actuel.

(Hérité de Object)
ExecuteCommand(Int32)

Exécute une commande personnalisée sur le service.

GetDevices()

Récupère les services de pilotes de périphériques sur l'ordinateur local.

GetDevices(String)

Récupère les services de pilotes de périphériques sur l'ordinateur spécifié.

GetHashCode()

Fait office de fonction de hachage par défaut.

(Hérité de Object)
GetLifetimeService()
Obsolète.

Récupère l'objet de service de durée de vie en cours qui contrôle la stratégie de durée de vie de cette instance.

(Hérité de MarshalByRefObject)
GetService(Type)

Retourne un objet qui représente un service fourni par Component ou par son Container.

(Hérité de Component)
GetServices()

Récupère tous les services sur l'ordinateur local, sauf les services de pilotes de périphériques.

GetServices(String)

Récupère tous les services sur l'ordinateur spécifié, sauf les services de pilotes de périphériques.

GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
InitializeLifetimeService()
Obsolète.

Obtient un objet de service de durée de vie pour contrôler la stratégie de durée de vie de cette instance.

(Hérité de MarshalByRefObject)
MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
MemberwiseClone(Boolean)

Crée une copie superficielle de l'objet MarshalByRefObject actuel.

(Hérité de MarshalByRefObject)
Pause()

Interrompt le fonctionnement d'un service.

Refresh()

Actualise les valeurs de propriété en réinitialisant les propriétés à leurs valeurs actuelles.

Start()

Démarre le service sans passer d'arguments.

Start(String[])

Démarre un service en passant les arguments spécifiés.

Stop()

Arrête ce service et tous les services qui en dépendent.

Stop(Boolean)

Arrête le service et éventuellement tous les services qui dépendent de ce service.

ToString()

Retourne un String contenant le nom du Component, s’il en existe un. Cette méthode ne doit pas être remplacée.

(Hérité de Component)
ToString()

Retourne une chaîne qui représente l'objet actuel.

(Hérité de Object)
WaitForStatus(ServiceControllerStatus)

Attend indéfiniment que le service atteigne l'état spécifié.

WaitForStatus(ServiceControllerStatus, TimeSpan)

Attend que le service atteigne l'état spécifié ou l'expiration du délai d'attente spécifié.

Événements

Disposed

Se produit lorsque le composant est supprimé par un appel à la méthode Dispose().

(Hérité de Component)

S’applique à

Voir aussi