ServiceBase 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 eine Basisklasse für einen Dienst als Teil einer Dienstanwendung bereit. ServiceBase muss abgeleitet werden, wenn eine neue Dienstklasse erstellt wird.
public ref class ServiceBase : System::ComponentModel::Component
public class ServiceBase : System.ComponentModel.Component
type ServiceBase = class
inherit Component
Public Class ServiceBase
Inherits Component
- Vererbung
- Abgeleitet
Hinweise
Leiten Sie ab ServiceBase , wenn Sie Ihre Dienstklasse in einer Dienstanwendung definieren. Jeder nützliche Dienst setzt die OnStart Methoden und OnStop außer Kraft. Für zusätzliche Funktionen können Sie und OnContinue mit spezifischem Verhalten als Reaktion auf Änderungen im Dienststatus überschreibenOnPause.
Ein Dienst ist eine ausführbare Datei mit langer Ausführungsdauer, die keine Benutzeroberfläche unterstützt und möglicherweise nicht unter dem angemeldeten Benutzerkonto ausgeführt wird. Der Dienst kann ausgeführt werden, ohne dass ein Benutzer am Computer angemeldet ist.
Standardmäßig werden Dienste unter dem Systemkonto ausgeführt, das nicht mit dem Administratorkonto identisch ist. Sie können die Rechte des Systemkontos nicht ändern. Alternativ können Sie ein ServiceProcessInstaller verwenden, um ein Benutzerkonto anzugeben, unter dem der Dienst ausgeführt wird.
Eine ausführbare Datei kann mehr als einen Dienst enthalten, muss aber für jeden Dienst einen separaten ServiceInstaller dienst enthalten. Der ServiceInstaller instance registriert den Dienst beim System. Das Installationsprogramm ordnet jedem Dienst auch ein Ereignisprotokoll zu, das Sie zum Aufzeichnen von Dienstbefehlen verwenden können. Die main()
Funktion in der ausführbaren Datei definiert, welche Dienste ausgeführt werden sollen. Das aktuelle Arbeitsverzeichnis des Diensts ist das Systemverzeichnis, nicht das Verzeichnis, in dem sich die ausführbare Datei befindet.
Wenn Sie einen Dienst starten, sucht das System die ausführbare Datei und führt die OnStart Methode für diesen Dienst aus, die in der ausführbaren Datei enthalten ist. Das Ausführen des Diensts ist jedoch nicht mit dem Ausführen der ausführbaren Datei identisch. Die ausführbare Datei lädt nur den Dienst. Auf den Dienst wird über den Dienststeuerungs-Manager zugegriffen (z. B. gestartet und beendet).
Die ausführbare Datei ruft den Konstruktor der ServiceBase abgeleiteten Klasse auf, wenn Sie zum ersten Mal Start für den Dienst aufrufen. Die OnStart Befehlsbehandlungsmethode wird sofort aufgerufen, nachdem der Konstruktor ausgeführt wurde. Der Konstruktor wird nach dem ersten Laden des Diensts nicht mehr ausgeführt. Daher ist es notwendig, die vom Konstruktor ausgeführte Verarbeitung von der von OnStartzu trennen. Alle Ressourcen, die von OnStop freigegeben werden können, sollten in OnStarterstellt werden. Das Erstellen von Ressourcen im Konstruktor verhindert, dass sie ordnungsgemäß erstellt werden, wenn der Dienst erneut gestartet wird, nachdem OnStop die Ressourcen freigegeben wurden.
Der Dienststeuerungs-Manager (Service Control Manager, SCM) bietet eine Möglichkeit, mit dem Dienst zu interagieren. Sie können den SCM verwenden, um Start-, Stop-, Pause-, Continue- oder benutzerdefinierte Befehle an den Dienst zu übergeben. Der SCM verwendet die Werte von CanStop und CanPauseAndContinue , um zu bestimmen, ob der Dienst die Befehle Stop, Pause oder Continue akzeptiert. Beenden, Anhalten und Fortfahren sind in den Kontextmenüs des SCM nur aktiviert, wenn die entsprechende Eigenschaft CanStop oder CanPauseAndContinue in der Dienstklasse enthalten ist true
. Wenn diese Option aktiviert ist, wird der Befehl an den Dienst übergeben, und OnStop, OnPauseoder OnContinue wird aufgerufen. Wenn CanStop, CanShutdownoder CanPauseAndContinue ist false
, wird die entsprechende Befehlsverarbeitungsmethode (z OnStop. B. ) nicht verarbeitet, auch wenn Sie die -Methode implementiert haben.
Sie können die ServiceController -Klasse verwenden, um programmgesteuert die Aufgaben des SCM mithilfe einer Benutzeroberfläche durchzuführen. Sie können die in der Konsole verfügbaren Aufgaben automatisieren. Wenn CanStop, CanShutdownoder CanPauseAndContinue ist true
, Sie aber keine entsprechende Befehlsverarbeitungsmethode (z OnStop. B. ) implementiert haben, löst das System eine Ausnahme aus und ignoriert den Befehl.
Sie müssen nicht implementieren, OnStopoder eine andere Methode in ServiceBaseimplementierenOnStart. Das Verhalten des Diensts wird jedoch in OnStartbeschrieben, sodass dieses Element mindestens überschrieben werden sollte. Die main()
Funktion der ausführbaren Datei registriert den Dienst in der ausführbaren Datei beim Dienststeuerungs-Manager, indem die Run -Methode aufgerufen wird. Die ServiceName -Eigenschaft des -Objekts, das ServiceBase an die Run -Methode übergeben wird, muss mit der ServiceName Eigenschaft des Dienstinstallationsprogramms für diesen Dienst übereinstimmen.
Sie können verwenden InstallUtil.exe
, um Dienste auf Ihrem System zu installieren.
Hinweis
Sie können ein anderes Protokoll als das Anwendungsereignisprotokoll angeben, um Benachrichtigungen über Dienstaufrufe zu empfangen, aber weder die AutoLog -Eigenschaft noch EventLog kann in ein benutzerdefiniertes Protokoll schreiben. Legen Sie auf fest AutoLogfalse
, wenn Sie die automatische Protokollierung nicht verwenden möchten.
Konstruktoren
ServiceBase() |
Erstellt eine neue Instanz der ServiceBase-Klasse. |
Felder
MaxNameLength |
Gibt die maximale Größe für einen Dienstnamen an. |
Eigenschaften
AutoLog |
Gibt an, ob die Befehle Starten, Beenden, Anhalten und Fortsetzen im Ereignisprotokoll aufgezeichnet werden sollen. |
CanHandlePowerEvent |
Ruft einen Wert ab, der angibt, ob der Dienst Benachrichtigungen über Änderungen im Energiestatus des Computers verarbeiten kann, oder legt diesen fest. |
CanHandleSessionChangeEvent |
Ruft einen Wert ab, der angibt, ob der Dienst Sitzungsänderungsereignisse aus einer Terminal Server-Sitzung behandeln kann, oder legt diesen fest. |
CanPauseAndContinue |
Ruft einen Wert ab, der angibt, ob der Dienst angehalten und wieder aufgenommen werden kann, oder legt diesen fest. |
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, oder legt diesen fest. |
CanStop |
Ruft einen Wert ab, der angibt, ob der Dienst nach dem Starten beendet werden kann, oder legt diesen fest. |
Container |
Ruft die IContainer ab, die in der Component enthalten ist. (Geerbt von Component) |
DesignMode |
Ruft einen Wert ab, der angibt, ob sich Component gegenwärtig im Entwurfsmodus befindet. (Geerbt von Component) |
EventLog |
Ruft ein Ereignisprotokoll ab, mit dem Sie Benachrichtigungen über Aufrufe von Dienstbefehlen wie Starten und Beenden in das Anwendungsereignisprotokoll schreiben können. |
Events |
Ruft die Liste der Ereignishandler ab, die dieser Component angefügt sind. (Geerbt von Component) |
ExitCode |
Ruft den Exitcode für den Dienst ab oder legt diesen fest. |
ServiceHandle |
Ruft das Dienststeuerungshandle für den Dienst ab. |
ServiceName |
Ruft den zur Bezeichnung des Diensts beim System verwendeten kurzen Namen ab oder legt diesen fest. |
Site |
Ruft den ISite von Component ab oder legt ihn fest. (Geerbt von Component) |
Methoden
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() |
Gibt alle vom Component verwendeten Ressourcen frei. (Geerbt von Component) |
Dispose(Boolean) |
Gibt die von der ServiceBase-Klasse verwendeten Ressourcen (mit Ausnahme des Speichers) frei. |
Equals(Object) |
Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist. (Geerbt von Object) |
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) |
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) |
OnContinue() |
Bei der Implementierung in einer abgeleiteten Klasse wird OnContinue() ausgeführt, wenn der Dienststeuerungs-Manager einen Befehl zum Fortsetzen an den Dienst sendet. Gibt Aktionen an, die durchgeführt werden müssen, wenn der normale Betrieb eines Diensts nach dem Anhalten wieder aufgenommen wird. |
OnCustomCommand(Int32) |
Bei der Implementierung in einer abgeleiteten Klasse wird OnCustomCommand(Int32) ausgeführt, wenn der Dienststeuerungs-Manager einen benutzerdefinierten Befehl an den Dienst übergibt. Gibt an, welche Aktionen auszuführen sind, wenn ein Befehl mit dem angegebenen Parameter auftritt. |
OnPause() |
Wird bei der Implementierung in einer abgeleiteten Klasse ausgeführt, wenn der Dienststeuerungs-Manager einen Befehl zum Anhalten an den Dienst sendet. Gibt Aktionen an, die beim Anhalten eines Diensts durchgeführt werden müssen. |
OnPowerEvent(PowerBroadcastStatus) |
Wird bei der Implementierung in einer abgeleiteten Klasse ausgeführt, wenn sich der Energiestatus des Computers geändert hat. Dies gilt für Laptops, wenn diese in den Standbymodus wechseln. Dieser entspricht nicht dem Herunterfahren des Systems. |
OnSessionChange(SessionChangeDescription) |
Wird ausgeführt, wenn ein Änderungsereignis von einer Terminal Server-Sitzung empfangen wird. |
OnShutdown() |
Wird bei der Implementierung in einer abgeleiteten Klasse beim Herunterfahren des Systems ausgeführt. Gibt an, welche Vorgänge unmittelbar vor dem Herunterfahren des Systems ausgeführt werden sollen. |
OnStart(String[]) |
Wird bei der Implementierung in einer abgeleiteten Klasse ausgeführt, wenn der Dienststeuerungs-Manager einen Befehl zum Starten an den Dienst sendet oder wenn das Betriebssystem gestartet wird (diese gilt für Dienste, die automatisch gestartet werden). Gibt Aktionen an, die beim Starten des Diensts ausgeführt werden müssen. |
OnStop() |
Wird bei der Implementierung in einer abgeleiteten Klasse ausgeführt, wenn der Dienststeuerungs-Manager einen Befehl zum Beenden an den Dienst sendet. Gibt Aktionen an, die beim Beenden eines Diensts auszuführen sind. |
RequestAdditionalTime(Int32) |
Fordert zusätzliche Zeit für eine ausstehende Operation an. |
RequestAdditionalTime(TimeSpan) |
Wenn diese Methode von OnStart, OnStop, OnPause oder OnContinue aufgerufen wird, wird der angegebene Wartehinweis an den Dienststeuerungs-Manager übergeben, um zu vermeiden, dass der Dienst als nicht reagiert gekennzeichnet wird. |
Run(ServiceBase) |
Registriert die ausführbare Datei für einen Dienst im Dienststeuerungs-Manager. |
Run(ServiceBase[]) |
Registriert die ausführbare Datei für mehrere Dienste im Dienststeuerungs-Manager. |
ServiceMainCallback(Int32, IntPtr) |
Registriert den Befehlshandler und startet den Dienst. |
Stop() |
Beendet den ausgeführten Dienst. |
ToString() |
Gibt einen String zurück, der den Namen der Component enthält (sofern vorhanden). Diese Methode darf nicht überschrieben werden. (Geerbt von Component) |
Ereignisse
Disposed |
Tritt auf, wenn die Komponente von einem Aufruf der Dispose()-Methode verworfen wird. (Geerbt von Component) |