Applikationen als Dienste einrichten

Autor: Siegfried Seifert, MCSEboard.de

Windows-Dienste sind Programme und Routinen, die in der Regel unsichtbar im Hintergrund laufen und mit den Berechtigungen eine Systemkontos ausgeführt werden. Der Dienst funktioniert also auch, wenn kein Anwender am System angemeldet ist.
Wenn eine Applikation keine Option zur Installation als Dienst anbietet, kann sie mit Hilfe zusätzlicher Tools dennoch als Dienst ausgeführt werden. Diese Tools heißen instsrv.exe und srvany.exe, beide enthalten in den Windows Server 2003 Resource Kit Tools.

Die Windows Server 2003 Resource Kit Tools sind Kommandozeilen-Tools und stehen kostenlos bei Microsoft zum Download bereit. Während mit instsrv.exe der neue Dienst im System registriert wird, arbeitet srvany.exe als eine Art „Wrapper“, der die eigentliche Applikation startet.

Vorbereitung

Laden Sie sich die  Windows Server 2003 Resource Kit Tools herunter und installieren sie in ein Verzeichnis Ihrer Wahl. Falls noch nicht geschehen, installieren Sie nun die Applikation, welche als Dienst ausgeführt werden soll und notieren sich den kompletten Pfad bis zur auszuführenden *.exe-Datei.

Anwendung

Starten sie aus dem Menü der Windows Resource Kit Tools die „Command Shell“ und geben folgenden Befehl ein:

instsrv.exe [Dienstname] [Pfad zur Anwendung] \srvany.exe (Enter)

Wählen Sie für den neuen Dienst einen eindeutigen Namen, der im System noch nicht verwendet wird. War die Eingabe korrekt, erhalten Sie die Bestätigung „The service was successfuly added!“ und Sie können die Command Shell schließen.

Hinweis: Wenn Sie statt der Command Shell aus dem Toolkit die Standard-Eingabeaufforderung (cmd.exe) verwenden, müssen Sie den kompletten Installationspfad zu instsrv.exe und srvany.exe im Toolkit-Verzeichnis mit angeben.

Registry

Öffnen Sie den Registry-Editor „regedit.exe“, navigieren zum Schlüssel: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\[Name des Dienstes] und erstellen im linken Fenster einen neuen Unterschlüssel mit dem Namen Parameters.

Im rechten Fenster des Unterschlüssels "Parameters" fügen Sie folgenden Wert hinzu:

Name: Application
Datentyp: Zeichenfolge (REG_SZ)
Wert: [Pfad zur Applikation] (den kompletten Pfad zur Applikation, mit Laufwerksbuchstabe und Dateiendung)

Danach können Sie den Registry-Editor beenden.


Dienst verwalten

Über Systemsteuerung >> Verwaltung >> Dienste können Sie den neuen Dienst nun verwalten und anpassen. Nach einem Neustart läuft die Applikation unsichtbar im Hintergrund. Das ist die Standardeinstellung. Wenn Sie über den Windows-Desktop jedoch Zugriff auf die Applikation benötigen, aktivieren Sie in den Diensteigenschaften unter dem Reiter Anmelden die Option „Datenaustausch zwischen Dienst und Desktop zulassen“. Dann wird Ihnen auch die Benutzeroberfläche der Applikation präsentiert.

Dienst entfernen

Um den selbsterstellten Dienst wieder zu entfernen, öffnen Sie die Command Shell und geben folgenden Befehl ein:

instsrv.exe [Dienstname] remove (Enter)

Die Einträge in der Registry werden sofort entfernt und der Dienst steht nicht mehr zur Verfügung.

Tipp: Dieses HowTo kann auch für Windows XP angewendet werden.

[ Ergänzung ]

Autor: olc, MCSEboard.de

Ein weiteres Programm, mit dessen Hilfe sich Dienste verwalten lassen, heißt „sc.exe“.
„sc.exe“ wird ab Windows XP bzw. Windows Server 2003 bei einer Standardinstallation mit installiert oder kann auf älteren Systemen über das Windows Server 2003 Ressource Kit nachinstalliert werden.

Der Vorteil von „sc.exe“ im Vergleich zu „srvany“ und „instsrv“ liegt darin, daß man lediglich dieses kommandozeilenbasierende Programm benötigt, um alle Eigenschaften von Diensten zu verwalten oder auszulesen. Es ist keine weitere Arbeit in der Registry oder mit verschiedenen Anwendungen notwendig.
Außerdem lassen sich mit „sc.exe“ (die entsprechenden Rechte auf dem Zielsystem vorausgesetzt) auch Dienste remote verwalten.
Man kann weiterhin auch Abhängigkeiten zwischen verschiedenen Diensten definieren.
Eindeutige Rückgabewerte nach einer Aktion mit „sc.exe“ liefern gute Möglichkeiten zum Scripting automatisierter Lösungen.

Das Werkzeug „sc.exe“ ist sehr mächtig in seinen Anwendungsmöglichkeiten. Es kann an dieser Stelle dementsprechend keine Beschreibung aller Möglichkeiten des Programms erfolgen. Microsoft bietet eine sehr umfangreiche Beschreibungsseite zu „sc.exe“ unter [1]. Leider sind auf dieser Webseite einige Beschreibungen nicht ganz eindeutig bzw. schlecht übersetzt – mit ein wenig eigenem Einsatz läßt sich jedoch recht schnell das ein oder andere Szenario nachvollziehen.
Die „sc.exe“-eigene Hilfe läßt sich über den Befehl „sc.exe /?“ aufrufen und ist ebenfalls sehr umfangreich.

Beispielhaft folgen drei Kommandozeilen, die zur Vereinfachung nur einen kleinen Teil der zur Verfügung stehenden Optionen verwenden:

  1. Einrichten einer Applikation als Dienst:
    sc create „Testdienst“ start= auto binpath= „C:\Programme\Beispieldatei.exe“
  2. Ändern des Starttyps eines vorhandenen Dienstes:
    sc config „Testdienst“ start= disabled
  3. Ändern der Beschreibung eines Dienstes:
    sc description „Testdienst“ „Dieser Dienst ist nur ein Dienst zu Testzwecken“

Hinweis: Bitte beachten Sie das Leerzeichen zwischen dem Optionsaufruf (z.B. „binpath=“) und dem zugewiesenen Wert. Dieses Leerzeichen ist obligatorisch und führt bei Nicht-Setzen zu Fehlermeldungen wie „HINWEIS: Der Optionsname enthält das Gleichheitszeichen“.

Powershell
Mit der „Powershell“ [2] (derzeit Version 1) hat Microsoft eine kommandozeilenbasierte Möglichkeit geschaffen, unter anderem sehr tiefgreifende Änderungen am Betriebssystem vorzunehmen.

So ist es mit Hilfe der Powershell etwa möglich, Dienste zu starten oder zu stoppen, zu bearbeiten oder aus Applikationen Dienste zu erzeugen. Folgende Befehle (genauer: „Cmdlets“) dienen der Bearbeitung von Diensten innerhalb der Powershell:

  • Start-Service
  • Stop-Service
  • Restart-Service
  • Suspend-Service
  • Resume-Service
  • Set-Service
  • New-Service

Hilfe zu den Befehlen liefert ein Aufruf von: PS C:\>Get-Help <Cmdlet>, z.B. Get-Help New-Service -detailed

Einen neuen Dienst kann man beispielsweise mittels folgender Kommandozeile erzeugen:
PS C:\>New-service –name Testdienst –binaryPathName „C:\Programme\Programmname\Binary.exe“ –displayName AnzeigenameTestdienst –startupType Automatic

© MCSEboard.de, Siegfried Seifert, olc