Freigeben über


ServiceController Klasse

Definition

Stellt einen Windows-Dienst dar und ermöglicht es, eine Verbindung mit einem ausgeführten oder beendeten Dienst herzustellen, ihn zu verändern oder Informationen über ihn abzurufen.

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
Vererbung
ServiceController
Vererbung
ServiceController
Attribute
Implementiert

Beispiele

Im folgenden Beispiel wird die Verwendung der ServiceController Klasse veranschaulicht, um das SimpleService Dienstbeispiel zu steuern.

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

Hinweise

Sie können die ServiceController Klasse verwenden, um eine Verbindung herzustellen und das Verhalten vorhandener Dienste zu steuern. Wenn Sie eine Instanz der ServiceController Klasse erstellen, legen Sie seine Eigenschaften so fest, dass er mit einem bestimmten Windows Dienst interagiert. Sie können dann die Klasse verwenden, um den Dienst zu starten, zu beenden und andernfalls zu bearbeiten.

Sie werden die ServiceController Komponente wahrscheinlich in einer verwaltungstechnischen Kapazität verwenden. Sie können beispielsweise eine Windows oder Webanwendung erstellen, die benutzerdefinierte Befehle an einen Dienst über die ServiceController Instanz sendet. Dies wäre nützlich, da das Microsoft Management Console-Snap-In der Microsoft Management Console (Service Control Manager, SCM) benutzerdefinierte Befehle nicht unterstützt.

Nachdem Sie eine Instanz ServiceControllererstellt haben, müssen Sie zwei Eigenschaften darauf festlegen, um den Dienst zu identifizieren, mit dem er interagiert: den Computernamen und den Namen des Diensts, den Sie steuern möchten.

Hinweis

Standardmäßig wird auf den lokalen Computer festgelegt, sodass Sie es nicht ändern müssen, es sei denn, MachineName Sie möchten die Instanz auf einen anderen Computer verweisen.

Im Allgemeinen schreibt der Dienstautor Code, der die Aktion angibt, die einem bestimmten Befehl zugeordnet ist. Beispielsweise kann ein Dienst Code enthalten, um auf einen ServiceBase.OnPause Befehl zu reagieren. In diesem Fall wird die benutzerdefinierte Verarbeitung für die Pause Aufgabe ausgeführt, bevor das System den Dienst angehalten.

Der Satz von Befehlen, die ein Dienst verarbeiten kann, hängt von seinen Eigenschaften ab; Sie können z. B. die CanStop Eigenschaft für einen Dienst auf falsefestlegen. Diese Einstellung rendert den Stop Befehl, der auf diesem bestimmten Dienst nicht verfügbar ist. Es verhindert, dass Sie den Dienst vom SCM beenden, indem Sie die erforderliche Schaltfläche deaktivieren. Wenn Sie versuchen, den Dienst von Ihrem Code zu beenden, löst das System einen Fehler aus und zeigt die Fehlermeldung "Fehler beim Beenden" servicenamean.

Konstruktoren

ServiceController()

Initialisiert eine neue Instanz der ServiceController-Klasse, die keinem bestimmten Dienst zugeordnet ist.

ServiceController(String)

Initialisiert eine neue Instanz der ServiceController-Klasse, die einem vorhandenen Dienst auf dem lokalen Computer zugeordnet ist.

ServiceController(String, String)

Initialisiert eine neue Instanz der ServiceController-Klasse, die einem vorhandenen Dienst auf dem angegebenen Computer zugeordnet ist.

Eigenschaften

CanPauseAndContinue

Ruft einen Wert ab, der angibt, ob der Dienst angehalten und fortgesetzt werden kann.

CanRaiseEvents

Ruft einen Wert ab, der angibt, ob die Komponente ein Ereignis auslösen kann.

(Geerbt von Component)
CanShutdown

Ruft einen Wert ab, der angibt, ob der Dienst beim Herunterfahren des Systems benachrichtigt werden soll.

CanStop

Ruft einen Wert ab, der angibt, ob der Dienst nach dem Starten angehalten werden kann.

Container

Ruft die IContainer ab, die in der Component enthalten ist.

(Geerbt von Component)
DependentServices

Ruft die Gruppe von Diensten ab, die von dem Dienst abhängen, der dieser ServiceController-Instanz zugeordnet ist.

DesignMode

Ruft einen Wert ab, der angibt, ob sich Component gegenwärtig im Entwurfsmodus befindet.

(Geerbt von Component)
DisplayName

Ruft einen angezeigten Namen für den Dienst ab oder richtet ihn ein.

Events

Ruft die Liste der Ereignishandler ab, die dieser Component angefügt sind.

(Geerbt von Component)
MachineName

Ruft den Namen des Computers ab, auf dem sich dieser Dienst befindet, oder legt diesen fest.

ServiceHandle

Ruft das Handle für den Dienst ab.

ServiceName

Ruft den Namen ab, der den Dienst identifiziert, auf den diese Instanz verweist, oder richtet diesen Namen ein.

ServicesDependedOn

Die Gruppe von Diensten, von denen dieser Dienst abhängig ist.

ServiceType

Ruft den Typ des Diensts ab, auf den dieses Objekt verweist.

Site

Ruft den ISite von Component ab oder legt ihn fest.

(Geerbt von Component)
StartType

Ruft einen Wert ab, der angibt, wie der vom ServiceController-Objekt angegebene Dienst gestartet wird.

Status

Ruft den Zustand des Diensts ab, auf den diese Instanz verweist.

Methoden

Close()

Trennt diese ServiceController-Instanz vom Dienst und gibt alle Ressourcen frei, die durch die Instanz reserviert wurden.

Continue()

Setzt einen Dienst fort, nachdem dieser angehalten wurde.

CreateObjRef(Type)

Erstellt ein Objekt mit allen relevanten Informationen, die zum Generieren eines Proxys für die Kommunikation mit einem Remoteobjekt erforderlich sind.

(Geerbt von MarshalByRefObject)
Dispose()

Führt anwendungsspezifische Aufgaben durch, die mit der Freigabe, der Zurückgabe oder dem Zurücksetzen von nicht verwalteten Ressourcen zusammenhängen.

Dispose()

Gibt alle vom Component verwendeten Ressourcen frei.

(Geerbt von Component)
Dispose(Boolean)

Gibt die von ServiceController verwendeten nicht verwalteten Ressourcen und optional die verwalteten Ressourcen frei.

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
ExecuteCommand(Int32)

Führt einen benutzerdefinierten Befehl für den Dienst aus.

GetDevices()

Ruft die Gerätetreiberdienste auf dem lokalen Computer ab.

GetDevices(String)

Ruft die Gerätetreiberdienste auf dem angegebenen Computer ab.

GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetLifetimeService()
Veraltet.

Ruft das aktuelle Lebensdauerdienstobjekt ab, das die Lebensdauerrichtlinien für diese Instanz steuert.

(Geerbt von MarshalByRefObject)
GetService(Type)

Gibt ein Objekt zurück, das einen von der Component oder von deren Container bereitgestellten Dienst darstellt.

(Geerbt von Component)
GetServices()

Ruft alle Dienste auf dem lokalen Computer mit Ausnahme der Gerätetreiberdienste ab.

GetServices(String)

Ruft alle Dienste auf dem angegebenen Computer mit Ausnahme der Gerätetreiberdienste ab.

GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
InitializeLifetimeService()
Veraltet.

Ruft ein Lebensdauerdienstobjekt zur Steuerung der Lebensdauerrichtlinie für diese Instanz ab.

(Geerbt von MarshalByRefObject)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
MemberwiseClone(Boolean)

Erstellt eine flache Kopie des aktuellen MarshalByRefObject-Objekts.

(Geerbt von MarshalByRefObject)
Pause()

Unterbricht die Ausführung eines Diensts.

Refresh()

Aktualisiert Eigenschaftswerte durch Zurücksetzen der Eigenschaften auf ihre aktuellen Werte.

Start()

Startet den Dienst und übergibt dabei keine Argumente.

Start(String[])

Startet einen Dienst und übergibt dabei die angegebenen Argumente.

Stop()

Beendet diesen Dienst sowie alle Dienste, die von diesem Dienst abhängig sind.

Stop(Boolean)

Stoppt den Dienst und optional alle Dienste, die von diesem Dienst abhängig sind.

ToString()

Gibt einen String zurück, der den Namen der Component enthält (sofern vorhanden). Diese Methode darf nicht überschrieben werden.

(Geerbt von Component)
ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)
WaitForStatus(ServiceControllerStatus)

Wartet unbegrenzt, bis der Dienst den angegebenen Zustand annimmt.

WaitForStatus(ServiceControllerStatus, TimeSpan)

Wartet, bis der Dienst den angegebenen Status annimmt oder bis das angegebene Timeout abläuft.

Ereignisse

Disposed

Tritt auf, wenn die Komponente von einem Aufruf der Dispose()-Methode verworfen wird.

(Geerbt von Component)

Gilt für

Siehe auch