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, 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
- 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 false
festlegen. 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" servicename
an.
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) |