Möchte man ein Skript oder eine Anwendung als Dienst unter Windows ausführen, so gibt es viele Wege ans Ziel.
Bordmittel
Bereits mit dem in Windows enthaltenen Befehl “sc” bzw. “sc.exe” kann man Dienste anlegen, konfigurieren und steuern. Anbei ein paar Beispiele:
Minimal-Konfiguration:
sc create <Dienstname> binpath= "C:\Test\test.exe"
Als Dienst- und Anzeigename wird der erste Parameter verwendet, Pfad und ausführbare Datei müssen angegeben werden. Als Starttyp wird per Standard “Manuell” gesetzt, ebenso das der Dienst mit dem Systemkonto ausgeführt wird. Es gibt zahlreiche weitere Parameter bzw. Optionen die man der “sc.exe” mitgeben kann. Die Hilfe bei Microsoft bietet ausführliche Informationen hierzu:
Zum Ändern eines Dienstes verwendet man
Tricky kann die Übergabe von Parametern für “binpath” sein, vor allem wenn die Anführungszeichen (engl. quote) notwendig sind. Eine sehr gute Anleitung zu diesem Punkt findet sich hier unter “OTHER TIPS”:
Genera Codice – When creating a service with sc.exe how to pass in context parameters?
Ein Beispiel:
sc create MeinDienst displayname= "Mein Dienst" binpath= "\"C:\temp\test01.cmd"\"
“\ am Anfang und \” am Ende sorgt dafür das der eigentliche Pfad samt ausführbare Datei in Anführungszeichen gesetzt wird:
"C:\temp\test01.cmd"
Möchte man wiederum einen Parameter übergeben sieht die Syntax wie folgt aus:
sc create MeinDienst displayname= "Mein Dienst" binpath= "\"C:\temp\test01.cmd\" -Parameter1
ergibt:
"C:\temp\test01.cmd" -Parameter1
Muss hinter dem Parameter ein weiterer Wert mit Anführungszeichen und/oder Leerzeichen folgen, muss der Befehl so aufgebaut sein:
sc create MeinDienst displayname= "Mein Dienst" binpath= "\"C:\temp\test01.cmd\" -Parameter1 "\"C:\temp\test01.conf\"
Drittanbietertools
Vielen alt-gedienten Windows-Admins dürfte diesbezüglich vor allem die “instsrv.exe” und “srvany.exe” aus älteren Windows Ressource Kits geläufig sein:
Microsoft – Docs – Erstellen eines benutzerdefinierten Diensts
Einen Download scheint es bei Microsoft nicht mehr zu geben, dafür findet man die Tools auf anderen Seiten wie z.B.
Der Windows Papst – IT Blog Walter – Applikation als Dienst laufen lassen
Die “srvany.exe” gilt sozusagen als Oldie, but Goldie und soll auch unter aktuellen Windows-Versionen noch funktionieren. Getestet habe ich das allerdings nicht.
Einfacher und mitunter mächtiger können diverse Helferlein von weiteren Anbietern sein. So lässt sich oft mittels einer grafischen Oberfläche oder mit Hilfe einer Datei ein Dienst konfigurieren und steuern.
Jüngeren Datums als “srvany.exe”, auch wenn es seit 2017 kein Update mehr gegeben hat, ist der NSSM – the Non-Sucking Service Manager. Dieses Tool kann sowohl via CLI bzw. Skript als auch mittels GUI genutzt werden.
Ganz ohne Eingabeaufforderung kommt die GUI allerdings auch nicht aus, da man für das Installieren eines neuen Dienstes oder für das Ändern eines Bestehenden entsprechende Aufrufe notwendig sind:
nssm install <Dienstname> nssm edit <Dienstname>
Es öffnet sich die grafische Oberfläche die in verschiedene Registerkarten aufgeteilt ist. So lassen sich bequem die einzelnen Parameter und Optionen einstellen:
Tipp: Wenn man nur kurze Batch-Skripte hat, gemeint ist, das diese schnell durchlaufen und dann beendet sind, empfiehlt es sich keine automatische Neustart-Aktion festzulegen, da sonst das Skript mehrfach hintereinander aufgerufen wird:
Ebenfalls von Vorteil sind die “Hooks”, die es ermöglichen Aktionen in den verschiedenen Stati beispielsweise vor und nach dem Start eines Dienstes, sowie bei dessen Beendigung auszuführen:
Weitere Tools
Ein weiteres Tools mit grafischer Oberfläche ist DaemonMaster. Im Gegensatz zu den oben vorgestellten Helferlein muss dieses installiert werden und befindet sich im Alpha Stadium! In einem kurzen Test unter Windows 10 funktionierte dieses allerdings bereits ganz gut:
WinSW, der Windows Service Wrapper, erstellt und konfiguriert Dienste mittels Datei. Zum Testen von diesem bin ich bislang nicht gekommen.
Verheiratet, Vater von zwei Kindern, eines an der Hand, eines im Herzen. Schon immer Technik-Freund, seit 2001 in der IT tätig und seit über 10 Jahren begeisterter Blogger. Mit meiner Firma IT-Service Weber kümmern wir uns um alle IT-Belange von gewerblichen Kunden und unterstützen zusätzlich sowohl Partner als auch Kollegen.
Hallo,
ich erstelle erfolgreich einen neuen Dienst mit “sc create”, erhalte aber beim Start stets die Fehlermeldung: “Fehler 1053: Der Dienst antwortet nicht rechtzeitig auf die Start- oder Steuerungsanforderung”
Könntest du ein funktionierendes Beispielprogramm nennen oder eine minimale test.cmd veröffentlichen? Irgendwas mache ich noch falsch.
Viele Grüße
Markus
Ich konnte das Problem lösen. So wie oben beschrieben, klappt es leider nicht mit einer beliebigen exe. Dafür ist der Weg über z.B. srvany.exe erforderlich.
https://superuser.com/questions/1737231/1053-error-info-when-to-convert-bat-into-a-service
“You’re getting error 1053 because your batch file is not a “true” Windows Service — even though you added it with SC and it shows up in the Services application.
To function properly, a Windows Service must implement the Services API. Since your batch file does not implement that API, you will need a “wrapper” application to run your batch file as a service. The free “SRVANY” utility from Microsoft may work for you but you should investigate the more fully-featured commercial alternatives as well.”
1. srvany.exe aus altem Windows Resource Kit kopieren (Link von der-windows-papst.de oben)
2. Dienst erstellen
sc create “AAA” binPath= “C:\srvany.exe”
3. Unter HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesAAA
den Schlüssel ‘Parameters’ erstellen
4. Dort den REG_SZ ‘Application’* erstellen und den Pfad zur Anwendung angeben.
Weitere optionale Parameter als REG_SZ: ‘AppDirectory’, ‘AppParameters’
*beim Link oben zu der-windows-papst.de steht fälschlich ‘Applications’