Dienste programmieren mit .NET

Dienst kontrollieren mit dem eigenen Service-Controller

Oft ist ein Dienst nur dafür gedacht, die eigenen Programme mit bestimmten Fähigkeiten auszustatten. In einem solchen Fall will man sicherlich die Möglichkeit haben, einen Dienst programmatisch zu kontrollieren: Man will zum Beispiel einen Dienst unter Umständen zwischenzeitlich anhalten und dann wieder starten. Wie so etwas funktioniert, findet sich als Beispiel im Service-Controller-Projekt (SC).

Damit ein Dienst angehalten und wieder gestartet werden kann, muss er diese Funktionalität zunächst einmal unterstützen. Dazu setzen Sie in den Eigenschaften des Dienstes das Flag "CanPauseAndContinue" auf true. Das reicht aber nicht aus - man muss außerdem zwei Methoden der Basisklasse überladen: OnPause() und OnContinue(). In unserem Beispiel wird dabei einfach ein Flag gesetzt. Wenn "paused" den Wert true hat, stellt der Dienst seine Tätigkeit ein. Wird dann der Dienst befragt, liefert er nicht länger die Zeichenfolge "Kommando erhalten", sondern einen anderen konstanten Text:

if( paused) data = "Service pausiert";
else data = "Kommando erhalten";

Ist das im Dienst vorgesehen, kann man einen kleinen Service-Controller programmieren, der einen laufenden Dienst pausiert und einen pausierten wieder weiterlaufen lässt.

In unserem Beispiel haben wir den Service Controller als Anwendung angelegt, die sich nur im Notifizierungsbereich der Task-Leiste bemerkbar macht. Mit einem Doppelklick auf das Icon erhält der Anwender eine kleine Dialogbox, die lediglich über einen Button verfügt. Damit kann der Anwender den laufenden Dienst pausieren und einen pausierenden weiterlaufen lassen.