Wie erstelle ich einen Dienst, der eine .bat-Datei unter Windows 2008 Server ausführt?

21

Ich habe den Dienst mit erstellt

sc create myService binpath=myservice.bat

Aber wenn ich es starte, schlägt es mit der folgenden Fehlermeldung fehl:

[SC] StartService FAILED 1053:
    The service did not respond to the start or control request in a timely fashion.

Unter Win2k3 habe ich die Datei srvany.exe aus dem Resource Kit verwendet, für win2k8 gibt es jedoch kein Resource Kit. Zur Zeit habe ich die Datei srvany.exe auf meinem Computer installiert, aber ich denke nicht, dass dies der beste Weg ist, dies zu tun.

Vielen Dank!

Abyx
quelle
1
Sie können eine Batch-Datei als Dienst ausführen? Wäre eine geplante Aufgabe nicht besser? Wenn Sie einen tatsächlichen Windows-Dienst verwenden, muss das OnLoad-Ereignis innerhalb weniger Sekunden zurückgegeben werden.
Tsilb

Antworten:

9

Natürlich kann man einen solchen Dienst nicht betreiben. Haben Sie versucht, srvany in Server 2008 zu verwenden? Soweit ich weiß, gibt es für s2k8 keine 'offizielle' Version von srvany, aber Sie können es immer versuchen, nicht wahr?

EDIT: Oh, ich habe vergessen! Wir verwenden FireDaemon auch, um Nicht-Dienstanwendungen als Dienste auszuführen. Es ist jedoch nicht kostenlos und die Funktionalität ist ein bisschen zu viel für Ihre Bedürfnisse.

shylent
quelle
Welches ist das, was ich geschrieben habe.
Abyx
hmm .. das ist komisch. Es ist einfach durch mein Gehirn gefiltert. Es tut uns leid. In jedem Fall scheint srvany in dieser Situation das Beste zu sein.
Shylent
srvany funktioniert 2008 (ich verwende es, um Winamp.exe als Dienst auf einem Heimserver zu installieren und auszuführen) ... aber Sie können nicht nur eine Fledermausdatei ausführen.
Oskar Duveborn
24

Verwenden Sie NSSM, um eine BAT- oder eine beliebige alte EXE-Datei als Dienst auszuführen. Es ist fast ein Ersatz für SRVANY und eine unkomplizierte Anwendung.

http://iain.cx/src/nssm/

Ich hatte das gleiche Problem wie Sie und NSSM war das einzige Dienstprogramm, das funktionierte.

Matthew Blackford
quelle
3
Ich hatte noch nie davon gehört, aber es scheint ein wertvolles Werkzeug zu sein. Danke für den Tipp.
Skyhawk
Danke, es hat bei mir funktioniert. Ich suche jedoch immer noch nach Optionen, um den Dienst zu einem bestimmten Zeitpunkt zu beenden.
Ankit
8

Wir verwenden den Taskplaner , um Aufgaben auszuführen, wenn der Computer gestartet wird (unabhängig davon, ob ein Benutzer angemeldet ist oder nicht).

Korayem
quelle
1
Zum Ausblenden des Fensters lesen Sie dies oder das, wenn Sie nicht gerne als System ausgeführt werden
JonnyRaa
7

Sie können nicht einfach eine .BAT-Datei oder eine alte .EXE-Datei als Dienst ausführen. Windows-Dienste funktionieren nicht so wie Sie. Sie können ein Hilfsprogramm wie den Non-Sucking Service Manager (NSSM) oder das Non-Free-SRVANY-Hilfsprogramm von Microsoft verwenden, um ein beliebiges Programm als Dienst auszuführen. Möglicherweise stellen Sie jedoch fest, dass Sie kein sehr "anständiges" Stoppverhalten erhalten.

Evan Anderson
quelle
3

Der Befehl SC fügt nur die erforderlichen Registrierungseinträge für einen Dienst hinzu. Wenn die von Ihnen angegebene Datei keine gültige Dienst-Exe ist, wird sie nicht in eine solche umgewandelt.

Schneebesen
quelle
2

von: diesem Beitrag in den Technet-Foren: http://social.technet.microsoft.com/Forums/en-US/winserverMigration/thread/98a97aee-c62b-4683-94ab-3777899cf7de/

Hier ist was zu tun ...

Zum Zeitpunkt dieser Veröffentlichung gibt es keine Windows Server 2008 Resource Kit-Tools. Rufen Sie daher die Datei "srvany.exe" von den "Windows Server 2003 Resource Kit-Tools" ab und kopieren Sie sie an einen geeigneten Speicherort auf Ihrem Win2008-Server (z. B. C: \ Windows \ System32 \). Verwenden Sie "sc", um einen neuen Dienst zu erstellen, der "srvany" startet (z. B. sc create MyService binPath = C: \ Windows \ System32 \ srvany.exe DisplayName = "My Custom Service") service (z. B. HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ MyService \ Paramaters \) Mit RegEdit: Erstellen Sie im neu erstellten Schlüssel "Parameters" einen Zeichenfolgenwert mit dem Namen "Application" und geben Sie den vollständigen Pfad zu der Anwendung ein, unter der Sie ausgeführt werden möchten Ein Dienst. (Keine Anführungszeichen erforderlich.)

Und das sollte es tun.

Hinweis: Einige Anwendungen speichern ihre Einstellungen in einer Benutzerstruktur, nicht unter HKEY_LOCAL_MACHINE. Daher müssen Sie die Anwendung ausführen, um sie zu konfigurieren, und anschließend den Dienst so konfigurieren, dass er als dieser Benutzer ausgeführt wird.

user1977194
quelle
2

versuchen Sie das ... es hat bei mir funktioniert ..

sc create ServiceTest binpath= "C:\Windows\System32\cmd.exe /C C:\ServiceTest\Jenkins-Slave.bat"
Kushal Gangan
quelle
Bei mir hat es auch nicht geklappt! Gleicher Fehler wie OP - nicht rechtzeitig gestartet.
Ravindra HV
Dito - hat nicht funktioniert.
Spedge
0

Ich bin über dieses Ding gestolpert. Hier ist das Tool namens Bat_To_Exe_Converter. Es ist ganz einfach, BAT-Dateien in EXE-Dateien zu konvertieren. Versuch es. Lade zuerst den Downloader herunter und er lädt dann automatisch den Bat_To_Exe_Converter herunter. Es hat mir sehr geholfen, einen Dienst zu erstellen, der meine .bat-Datei über .exe ausführt. http://download.cnet.com/Bat-To-Exe-Converter/3001-2069_4-10555897.html?spi=eae5ab48292cc101b5f0ec370cf99ad0

Ilya
quelle
Willkommen bei Server Fault! Während dies theoretisch die Frage beantworten mag, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
Scott Pack
0

Ich habe zwei andere Optionen gefunden, mit denen Sie nicht nach Ihrer Brieftasche greifen können.

Sie können einen scStart haben , srvanyder dann auf Ihr Programm zeigt. (Es gibt einen Forumsbeitrag, auf den ich keinen Link setzen kann, weil ich hier nicht genug Repräsentanten habe, obwohl ich dies auf StackOverflow tue - meckere)

Hier sind die Schritte, die das Original-Poster verwendet hat:

  1. Verwenden Sie scdiese Option , um einen neuen Dienst zu erstellen, der gestartet wird srvany(z. B. sc create MyService binPath=C:\Windows\System32\srvany.exe DisplayName="My Custom Service").
  2. Verwenden von RegEdit: Erstellen Sie einen ParametersSchlüssel für Ihren Dienst (z. B. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MyService\Parameters\)
  3. Verwenden von RegEdit: Erstellen Sie im neu erstellten ParametersSchlüssel einen Zeichenfolgenwert mit dem Namen Applicationund geben Sie den vollständigen Pfad zu der Anwendung ein, die Sie als Dienst ausführen möchten. (Keine Anführungszeichen erforderlich.)

Wenn das wie ein Hack aussieht , können Sie einen .NET-Dienst erstellen, um Ihren Prozess zu starten. Wenn Sie einige Schritte überspringen möchten, finden Sie hier einen Open-Source-.NET-Dienst, mit dem generische Prozesse gestartet werden können:

http://www.codeproject.com/KB/system/xyntservice.aspx

Passen Sie es an Ihre Bedürfnisse an, aber es macht das meiste, was Sie wollen.

Databyte
quelle
Und ist das von Ihnen erwähnte srvany das von Win2k3, das keine unterstützte Version für Win2k8 hat?
LarsH