Dienste programmieren mit .NET

Dienste und deren Modi

Ist der Dienst installiert, muss er auch noch in den Betriebsmodus versetzt werden. Dienste können sich nämlich in verschiedenen Zuständen befinden: "Angehalten", "Gestoppt" und "Gestartet". Es gibt auch noch einige Zwischenmodi, diese sind jedoch vorerst nicht von Bedeutung. Ferner ist für einen Dienst festzulegen, wie und ob er gestartet werden kann oder darf.

Den Startmodus, den Status eines Dienstes und die zu verwendenden Account-Daten legen Sie bei der Installation fest. Nachträgliche Änderungen lassen sich über das Applet "Dienste" in der Systemsteuerung vornehmen.

Wird ein Rechner nie oder nur selten neu gestartet, resultiert daraus eine sehr lange Laufzeit eines Dienstes. Das bedeutet auch, dass ein Dienst gegen kleinere Programmierfehler potenziell anfälliger ist als ein normales Anwendungsprogramm. Liegt in einem Dienst beispielsweise ein Speicherleck vor, so kann selbst ein kleines Leck im Laufe der Zeit eine ganze Menge Speicher reservieren und nicht wieder freigeben. Da der Dienst jedoch nicht wie ein Anwendungsprogramm hin und wieder beendet und neu gestartet wird, erfolgt auch nie wieder eine Freigabe des verbrauchten Speichers. Irgendwann wird der Dienst deswegen versagen oder zumindest die Systemleistung erheblich beeinflussen.

Natürlich kann ein Dienst auch aus anderen Gründen versagen - zum Beispiel durch einen normalen Programmfehler, der sich erst nach einiger Zeit oder durch das Eintreten besonderer Umstände bemerkbar macht. Bei Diensten passiert dann das Gleiche wie bei normalen Programmen: Sie stürzen ab.

Nun ist der Sinn eines Dienstes aber der, dass er ständig verfügbar ist. Darum sieht der Service Control Manager die Möglichkeit vor, einen abgestürzten Dienst automatisch neu zu starten, den Rechner neu zu booten oder ein beliebiges Programm auszuführen, etwa um eine E-Mail oder SMS an den Administrator zu senden.