Windows - Programme als Services starten

Wir zeigen Ihnen hier, wie Sie ein beliebiges Programm als Service unter Windows starten.

Sie haben sich vielleicht gelegentlich schon gewünscht, ein x-beliebiges Programm unabhängig von der Anmeldung eines Benutzers im Hintergrund zu starten. Dieser Betrieb als Service verlangt vom Programmierer spezielle Vorkehrungen, damit ein Programm, das als Service laufen soll, in der dafür vorgeschriebenen Weise mit dem Betriebssystem interagiert.

Programme, die nicht für den Service-Betrieb geschrieben sind, können aber mit Hilfe und sozusagen „unter den Fittichen“ eines zusätzlichen Programmes, das selbst als Service programmiert ist, dennoch als solcher ablaufen. Microsoft stellt im Rahmen des NT Resource Kit ein derartiges Werkzeug zur Verfügung: srvany.exe.

Beachten Sie bitte: Nicht jedes Programm kann und sollte als Service „missbraucht“ werden. Es eignen sich vor allem solche Programme, die für Service-Zwecke und für den Ablauf im Hintergrund gedacht sind. Für Fehler auf Grund falscher Konfigurationsversuche können wir keine Haftung übernehmen. Das Vorgehen bei der Installation ist nicht ganz trivial. Sie sollten deshalb einige Vorkenntnisse im Umgang mit Windows mitbringen. Falls noch nicht vorhanden, müssen Sie zwei Programme aus dem Resource Kit auf Ihren PC laden und zur Ausführung bereitstellen. Die folgenden Seiten gehen davon aus, dass Sie beide Programme in dasselbe Verzeichnis speichern. Jedes Programm, das auf diese Weise als Service ins System integriert werden soll, benötigt seinen eigenen srvany-Service. Es liegt eine Lizenz für die Universität Freiburg vor. Deshalb können diese Programme nur nach Anmeldung mit einem gültigen Benutzerkonto des Rechenzentrums heruntergeladen werden. <table border="0" cellpadding="0" cellspacing="0" width="100%" style="background-color:transparent"><tr> <td><strong>DOWNLOAD:</strong></td> <td><strong><a href="https://portal.uni-freiburg.de/rz/inhalt/pw/Binaries/srvany/at_download/file" target="_blank">srvany.exe</a></strong></td> <td><strong><a href="https://portal.uni-freiburg.de/rz/inhalt/pw/Binaries/instsrv/at_download/file" target="_blank">instsrv.exe</a></strong></td> <td><strong><a href="https://portal.uni-freiburg.de/rz/inhalt/pw/Binaries/testservice/at_download/file" target="_blank">Beispieldateien (ZIP)</a></strong> aus dieser Seite</td> </tr></table>

Jetzt geht's los!

Mit wenigen Zeilenkommandos im DOS-Fenster und einigen Mausklicks haben Sie die Arbeit erledigt.

Bitte berücksichtigen: Falls im Pfad Leerzeichen auftauchen, muß die gesamte Pfadangabe in Anführungszeichen gesetzt werden.
Beispiel:

"c:\program files\anyprogram.exe"

Schritt 1: Installieren von SRVANY

Vorausgesetzt, Sie haben die beiden Programme srvany.exe und instsrv.exe in einem beliebigen Verzeichnis Ihrer Wahl (z.b. c:\bin) untergebracht. Dann wechseln Sie am besten in dieses Verzeichnis und geben folgendes Kommando ein:

instsrv testservice c:\bin\srvany.exe

Der Service-Name, in diesem Beispiel testservice kann von Ihnen frei vergeben werden. Einzige Einschränkung: Der Name darf im System nur einmal auftauchen. Er dient zur Identifizierung z.B. im Task Monitor des Systems und bei der Deinstallation des Service. Es muss auf jeden Fall der volle Pfadname für das Service-Programm angegeben werden.

Damit wird also srvany.exe unter dem Namen testservice als Service registriert. Der Service startet automatisch, wenn das System hochfährt; er läuft als Systemprozess. Nach dieser Registrierung läuft der Service noch nicht!

Schritt 2: Konfiguration von SRVANY

Nun benötigt der Service (im Beispiel: testservice) zusätzliche Angaben, welches Programm (im Beispiel: testservice) er in seiner Umgebung ablaufen lassen soll. Dabei sind nicht nur der Pfad der Programmdatei sondern sind auch die Kommandozeilen-Argumente in der Systemregistry einzutragen.

Der Pfad in der Registry-Datei lautet für unser Beispiel:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\testservice\

Nach der Installation im Schritt 1 wurde sofort dieser Schlüssel angelegt. Nun müssen Sie in diesem Registry-Pfad zunächst den Unterschlüssel Parameters und darin dann drei Stringparameter (REG_SZ) anlegen, die das Anwendungsprogramm und seine Parameter bezeichnen.

Um Ihnen die Arbeit etwas zu erleichtern, erstellen wir Ihnen hier beispielhaft eine Stapeldatei (.BAT) und eine Registry-Konfigurationsdatei (.REG) zu einer Testanwendung test.bat. Alle drei können Sie markieren, kopieren und lokal speichern, um damit zu testen. Wenn Sie die Stapeldatei mit Doppelklick im Windows-Explorer aufrufen, wird Ihnen das manuelle Installieren des Dienstes abgenommen.

Die Stapeldatei zum Kopieren (z.B. nach testservice.bat):

@echo off
SET APPNAME=testservice
SET INSTSRV=c:\bin\instsrv.exe
SET SRVANY=c:\bin\srvany.exe
echo.
if "%1" == "stop" goto stop
echo Einrichten des Service %APPNAME%
echo ----------------------------------------------------------------------
echo Anhalten und Deinstallieren mit dem Aufruf %APPNAME% stop
echo Pfadangaben notfalls ergaenzen
echo.
echo Installieren des Service...
"%INSTSRV%" "%APPNAME%" "%SRVANY%"
echo.
echo Installieren der Registry-Werte...
regedit "%APPNAME%.reg"
echo.
echo Starten des Service...
net start "%APPNAME%"
goto ende
:stop
echo Anhalten und Deinstallieren des Service %APPNAME%
echo ----------------------------------------------------------------------
echo Stoppen des Service...
net stop "%APPNAME%"
echo.
echo Deinstallieren des Service und der Registry-Werte...
"%INSTSRV%" "%APPNAME%" remove
:ende
echo.
echo *** Fertig ***
echo.

Ersetzen Sie bei den Zeilen

SET APPNAME=testservice
SET INSTSRV=c:\bin\instsrv.exe
SET SRVANY=c:\bin\srvany.exe

auf der rechten Seite der Zuweisung die Angaben nach Ihren Wünschen.

Dazu passend müssen Sie eine Konfigurationsdatei für die Registry anlegen, die nachfolgend für unser Beispiel formuliert ist. Nennen Sie die Datei (APPNAME).reg

Die zugehörige Registry-Datei zum Kopieren (z.B. nach testservice.reg):

REGEDIT4 (1. Zeile bei Windows XP)
Windows Registry Editor Version 5.00 (1. Zeile bei Windows 7)
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\testservice\Parameters]
"Application"="c:\\bin\\test.bat"
"AppDirectory"="c:\\bin"
"AppParameters"="Mein Parameter"

Je nach Betriebssystem-Version muss die erste Zeile umformuliert werden. Im obigen Beispiel sind zwei Versionen angegeben. Löschen sie die jeweils falsch Zeile aus der Datei (auch den Kommentar in Klammern!!!).

In der Zeile, die mit „[HKEY_LOCAL_MACHINE“ beginnt, müssen Sie ggf. den Servicenamen (hier testservice) durch den engültigen Namen ersetzen.

Achten Sie auch darauf, dass bei den Parameterwerten das Trennzeichen '\' innerhalb eines Pfadnamens immer doppelt geschrieben wird.

Und nun unsere Beispiel-Anwendung. Es handelt sich um ein DOS-Batch-Script und heißt hier test.bat.

Die zugehörige Anwendung zum Kopieren (z.B. nach test.bat):

@echo off
echo. >>test.log
echo ---------------------------------------->>test.log
echo Mein Parameter lautet "%*" >>test.log
echo. >>test.log
dir c:\ >>test.log

Dieses kleine Script wird jedesmal, wenn der Service testservice startet, eine Meldung mit dem in der Registry gespeicherten Parameter „AppParameters“ und danach das Verzeichnislisting von c:\ an die Datei test.log anhängen. test.log wächst also mit jedem Service-Start um die Ausgabedaten.

Schritt 3: Installation bzw. Start der Anwendung als Service

Der neu festgelegte Service wird im obigen Script sofort gestartet und läuft bei jedem Systemstart automatisch los.

Die Installation des Service und der erste Start wird durch den einfachen Aufruf des Batch-Scriptes durchgeführt:

testservice

Sie können mit dem folgenden Kommando den Service auch manuell starten, nachdem er wie in Schritt 1 installiert wurde:

net start testservice

Schritt 4: Stop bzw. Deinstallation des Service

Die manuelle Variante:

Zunächst beenden Sie den Betrieb mit:

net stop testservice

Danach entfernen Sie den Service aus dem System mit:

instsrv testservice remove

Dabei verschwindet dann auch der gesamte Eintrag

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\testservice\

aus der Registry.

Die Script-Variante:

Rufen Sie das Script, mit dem Sie den Service eingerichtet haben, mit dem Argument 'stop' auf:

testservice stop

Dann wird der Service gestoppt und aus dem System entfernt.

Anmerkung zum Acrobat Destiller

Zitat eines Lesers:

„Eine kleine Einstellung mußte ich ergänzen: Und zwar legt der Distiller (Acrobat 5) unter HKEY_CURRENT_USER/Software/ADOBE/Acrobat Distiller/5.0/WatchedFolders/ das überwachte Verzeichnis an. Will man den Dienst auf einem Server verwenden, muß man der Pfad zusätzlich unter HKEY_USERS/.DEFAULT/Software/Adobe/Acrobat Distiller/5.0/WatchedFolders/ eintragen.“