Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Hinweis
Dieser Artikel gilt nicht für gehostete Dienste in .NET. Die neuesten Inhalte zu Windows-Diensten mit Microsoft.Extensions.Hosting.BackgroundService und der Vorlage "Worker Service" finden Sie unter:
Windows-Dienstanwendungen basieren auf einer Klasse, die von der System.ServiceProcess.ServiceBase Klasse erbt. Sie überschreiben Methoden aus dieser Klasse und definieren Funktionen für diese, um zu bestimmen, wie sich Ihr Dienst verhält.
Die wichtigsten Klassen, die an der Diensterstellung beteiligt sind, sind:
System.ServiceProcess.ServiceBase – Sie überschreiben Methoden aus der ServiceBase Klasse beim Erstellen eines Diensts und definieren den Code, um zu bestimmen, wie Ihre Dienstfunktionen in dieser geerbten Klasse funktionieren.
System.ServiceProcess.ServiceProcessInstaller und System.ServiceProcess.ServiceInstaller – Sie verwenden diese Klassen, um Ihren Dienst zu installieren und zu deinstallieren.
Darüber hinaus kann eine benannte ServiceController Klasse verwendet werden, um den Dienst selbst zu bearbeiten. Diese Klasse ist nicht an der Erstellung eines Diensts beteiligt, kann jedoch verwendet werden, um den Dienst zu starten und zu beenden, Befehle an ihn zu übergeben und eine Reihe von Enumerationen zurückzugeben.
Definieren des Dienstverhaltens
In Ihrer Dienstklasse überschreiben Sie Basisklassenfunktionen, die bestimmen, was passiert, wenn der Status Des Diensts im Dienststeuerungs-Manager geändert wird. Die ServiceBase Klasse macht die folgenden Methoden verfügbar, die Sie überschreiben können, um benutzerdefiniertes Verhalten hinzuzufügen.
| Methode | Grund für die Außerkraftsetzung |
|---|---|
| OnStart | Geben Sie an, welche Aktionen ausgeführt werden sollen, wenn Der Dienst gestartet wird. Sie müssen Code in diesem Verfahren schreiben, damit Ihr Dienst nützliche Aufgaben ausführt. |
| OnPause | Geben Sie an, was passieren soll, wenn Der Dienst angehalten wird. |
| OnStop | Geben Sie an, was passieren soll, wenn der Dienst nicht mehr ausgeführt wird. |
| OnContinue | Geben Sie an, was passieren soll, wenn der Dienst nach der Pause wieder normal funktioniert. |
| OnShutdown | Geben Sie an, was vor dem Herunterfahren des Systems geschehen soll, wenn Ihr Dienst zu diesem Zeitpunkt ausgeführt wird. |
| OnCustomCommand | Geben Sie an, was passieren soll, wenn Ihr Dienst einen benutzerdefinierten Befehl empfängt. Weitere Informationen zu benutzerdefinierten Befehlen finden Sie unter MSDN online. |
| OnPowerEvent | Geben Sie an, wie der Dienst reagieren soll, wenn ein Energieverwaltungsereignis empfangen wird, z. B. eine niedrige Batterie oder ein angehaltener Betrieb. |
Hinweis
Diese Methoden stellen Zustände dar, dass der Dienst während seiner Lebensdauer durchläuft; der Dienst wechselt von einem Zustand zum nächsten. Beispielsweise werden Sie den Dienst niemals dazu bringen, auf einen OnContinue Befehl zu reagieren, bevor OnStart aufgerufen wurde.
Es gibt mehrere andere Eigenschaften und Methoden, die von Interesse sind. Dazu gehören:
Die Run Methode für die ServiceBase Klasse. Dies ist der Haupteinstiegspunkt für den Dienst. Wenn Sie einen Dienst mithilfe der Windows-Dienstvorlage erstellen, wird Code in die Methode Ihrer Anwendung
Maineingefügt, um den Dienst auszuführen. Dieser Code sieht wie folgt aus:ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { new Service1() }; Run(ServicesToRun);Dim ServicesToRun() As System.ServiceProcess.ServiceBase ServicesToRun = New System.ServiceProcess.ServiceBase() {New Service1()} System.ServiceProcess.ServiceBase.Run(ServicesToRun)Hinweis
In diesen Beispielen wird ein Array vom Typ ServiceBaseverwendet, in dem jeder Dienst, den Ihre Anwendung enthält, hinzugefügt werden kann, und dann können alle Dienste zusammen ausgeführt werden. Wenn Sie jedoch nur einen einzelnen Dienst erstellen, können Sie das Array nicht verwenden und einfach ein neues Objekt deklarieren, das ServiceBase von diesem erbt, und führen Sie es dann aus. Ein Beispiel finden Sie unter How to: Write Services Programmatically.
Eine Reihe von Eigenschaften für die ServiceBase Klasse. Mit diesen Eigenschaften wird bestimmt, welche Methoden in Ihrem Dienst aufgerufen werden können. Wenn die CanStop Eigenschaft beispielsweise auf
truefestgelegt ist, kann die OnStop Methode für Ihren Dienst aufgerufen werden. Wenn die CanPauseAndContinue-Eigenschaft auftruefestgelegt ist, können die OnPause- und OnContinue-Methoden aufgerufen werden. Wenn Sie eine dieser Eigenschaften auftruefestlegen, sollten Sie anschließend die Verarbeitung für die zugeordneten Methoden außer Kraft setzen und definieren.
Sie können auch eine Komponente wie ServiceController verwenden, um mit einem bestehenden Dienst zu kommunizieren und dessen Verhalten zu steuern.