ServiceController Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Stellt einen Windows-Dienst dar und ermöglicht es Ihnen, eine Verbindung mit einem ausgeführten oder beendeten Dienst herzustellen, ihn zu bearbeiten oder Informationen darüber 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
- Vererbung
-
ServiceController
- Attribute
- Implementiert
Beispiele
Das folgende Beispiel veranschaulicht die Verwendung der ServiceController Klasse zum Steuern des SimpleService Dienstbeispiels.
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 mit vorhandenen Diensten herzustellen und das Verhalten vorhandener Dienste zu steuern. Wenn Sie eine Instanz der ServiceController Klasse erstellen, legen Sie dessen Eigenschaften so fest, dass sie mit einem bestimmten Windows-Dienst interagiert. Anschließend können Sie die Klasse verwenden, um den Dienst zu starten, zu beenden und andernfalls zu bearbeiten.
Sie werden die ServiceController Komponente höchstwahrscheinlich in einer Verwaltungskapazität verwenden. Sie können beispielsweise eine Windows- oder Webanwendung erstellen, die benutzerdefinierte Befehle über die ServiceController Instanz an einen Dienst sendet. Dies wäre nützlich, da das Microsoft Management Console-Snap-In (Service Control Manager, SCM) benutzerdefinierte Befehle nicht unterstützt.
Nachdem Sie eine Instanz erstellt ServiceControllerhaben, müssen Sie zwei Eigenschaften darauf festlegen, um den Dienst zu identifizieren, mit dem sie interagiert: den Computernamen und den Namen des Diensts, den Sie steuern möchten.
Hinweis
Standardmäßig ist sie auf den lokalen Computer festgelegt, sodass Sie sie nur ändern müssen, wenn Sie die Instanz so festlegen möchten, MachineName dass sie auf einen anderen Computer verweist.
Im Allgemeinen schreibt der Dienstautor Code, mit dem die Aktion angepasst wird, 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 Befehl, der Stop für diesen bestimmten Dienst nicht verfügbar ist. Er verhindert, dass Sie den Dienst vom SCM beenden, indem Sie die erforderliche Schaltfläche deaktivieren. Wenn Sie versuchen, den Dienst aus Ihrem Code zu beenden, löst das System einen Fehler aus und zeigt die Fehlermeldung "Fehler beim Beenden servicename" an.
Konstruktoren
| Name | Beschreibung |
|---|---|
| ServiceController() |
Initialisiert eine neue Instanz der Klasse, die ServiceController keinem bestimmten Dienst zugeordnet ist. |
| ServiceController(String, String) |
Initialisiert eine neue Instanz der Klasse, die ServiceController einem vorhandenen Dienst auf dem angegebenen Computer zugeordnet ist. |
| ServiceController(String) |
Initialisiert eine neue Instanz der Klasse, die ServiceController einem vorhandenen Dienst auf dem lokalen Computer zugeordnet ist. |
Eigenschaften
| Name | Beschreibung |
|---|---|
| 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 benachrichtigt werden soll, wenn das System heruntergefahren wird. |
| CanStop |
Ruft einen Wert ab, der angibt, ob der Dienst nach dem Starten beendet werden kann. |
| Container |
Ruft das, das IContainer die Component. (Geerbt von Component) |
| DependentServices |
Ruft den Satz von Diensten ab, der von dem Dienst abhängt, der dieser ServiceController Instanz zugeordnet ist. |
| DesignMode |
Ruft einen Wert ab, der angibt, ob sich der Component Entwurfsmodus derzeit befindet. (Geerbt von Component) |
| DisplayName |
Dient zum Abrufen oder Festlegen eines Anzeigenamens für den Dienst. |
| Events |
Ruft die Liste der Ereignishandler ab, die an diese Componentangefü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 |
Dient zum Abrufen oder Festlegen des Namens, der den Dienst identifiziert, auf den diese Instanz verweist. |
| ServicesDependedOn |
Die Gruppe der Dienste, von denen dieser Dienst abhängt. |
| ServiceType |
Ruft den Diensttyp ab, auf den dieses Objekt verweist. |
| Site |
Dient zum ISite Abrufen oder Festlegen des Werts des Component. (Geerbt von Component) |
| StartType |
Ruft einen Wert ab, der angibt, wie der vom Objekt dargestellte ServiceController Dienst gestartet wird. |
| Status |
Ruft den Status des Diensts ab, auf den von dieser Instanz verwiesen wird. |
Methoden
| Name | Beschreibung |
|---|---|
| Close() |
Trennt diese ServiceController Instanz vom Dienst und gibt alle Ressourcen frei, die die Instanz zugewiesen hat. |
| Continue() |
Setzt einen Dienst fort, nachdem er angehalten wurde. |
| CreateObjRef(Type) |
Erstellt ein Objekt, das alle relevanten Informationen enthält, die zum Generieren eines Proxys erforderlich sind, der für die Kommunikation mit einem Remoteobjekt verwendet wird. (Geerbt von MarshalByRefObject) |
| Dispose() |
Führt anwendungsdefinierte Aufgaben aus, die mit dem Freigeben, Freigeben oder Zurücksetzen nicht verwalteter Ressourcen verknüpft sind. |
| Dispose() |
Veröffentlicht alle ressourcen, die von der Component. (Geerbt von Component) |
| Dispose(Boolean) |
Gibt die nicht verwalteten Ressourcen frei, die von den ServiceController verwalteten Ressourcen verwendet werden, und gibt optional die verwalteten Ressourcen frei. |
| Equals(Object) |
Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht. (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() |
Dient als Standardhashfunktion. (Geerbt von Object) |
| GetLifetimeService() |
Veraltet.
Ruft das aktuelle Lebensdauerdienstobjekt ab, das die Lebensdauerrichtlinie für diese Instanz steuert. (Geerbt von MarshalByRefObject) |
| GetService(Type) |
Gibt ein Objekt zurück, das einen Dienst darstellt, der von der Component oder dem zugehörigen ContainerDienst bereitgestellt wird. (Geerbt von Component) |
| GetServices() |
Ruft alle Dienste auf dem lokalen Computer ab, mit Ausnahme der Gerätetreiberdienste. |
| GetServices(String) |
Ruft alle Dienste auf dem angegebenen Computer ab, mit Ausnahme der Gerätetreiberdienste. |
| GetType() |
Ruft die Type der aktuellen Instanz ab. (Geerbt von Object) |
| InitializeLifetimeService() |
Veraltet.
Ruft ein Lebensdauerdienstobjekt ab, um die Lebensdauerrichtlinie für diese Instanz zu steuern. (Geerbt von MarshalByRefObject) |
| MemberwiseClone() |
Erstellt eine flache Kopie der aktuellen Object. (Geerbt von Object) |
| MemberwiseClone(Boolean) |
Erstellt eine flache Kopie des aktuellen MarshalByRefObject Objekts. (Geerbt von MarshalByRefObject) |
| Pause() |
Hält den Vorgang eines Diensts an. |
| Refresh() |
Aktualisiert Eigenschaftswerte, indem die Eigenschaften auf ihre aktuellen Werte zurückgesetzt werden. |
| Start() |
Startet den Dienst und übergibt keine Argumente. |
| Start(String[]) |
Startet einen Dienst und übergibt die angegebenen Argumente. |
| Stop() |
Beendet diesen Dienst und alle Dienste, die von diesem Dienst abhängig sind. |
| Stop(Boolean) |
Beendet den Dienst und optional alle Dienste, die von diesem Dienst abhängig sind. |
| ToString() |
Gibt einen String mit dem Namen des Component, falls vorhanden, zurück. Diese Methode sollte nicht außer Kraft gesetzt werden. (Geerbt von Component) |
| ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |
| WaitForStatus(ServiceControllerStatus, TimeSpan) |
Wartet, bis der Dienst den angegebenen Status erreicht oder das angegebene Timeout abläuft. |
| WaitForStatus(ServiceControllerStatus) |
Wartet unendlich, bis der Dienst den angegebenen Status erreicht. |
Ereignisse
| Name | Beschreibung |
|---|---|
| Disposed |
Tritt auf, wenn die Komponente durch einen Aufruf der Dispose() Methode verworfen wird. (Geerbt von Component) |