Dienst in Fenster 10 kann nicht mit NSSM gestartet werden

2

Ich habe eine kleine Skriptdatei zum Testen erstellt.

Das ist meine script.bat Datei.

sc create myService binpath= C:\Users\Admin\Desktop\test.bat start= auto 

Dies ist meine test.bat- Datei.

echo "Welcome to Wizard"

Problemstellung

Ich kann den Service von Start Control Panel Service.

Ich erhalte folgenden Fehler.

[SC] StartService FAILED 1053: Der Dienst hat nicht rechtzeitig auf die Start- oder Steuerungsanforderung geantwortet.

Deshalb benutze ich nssm.

JETZT passiert das, wenn ich folgenden Befehl auf Powershell ausführe

\ nService installieren, das Dialogfeld I wird angezeigt. Ich gebe den Pfad meiner Skriptdatei an und klicke auf Install Service.

Nach erfolgreicher Installation des Dienstes. Ich gehe zu Systemsteuerung -> Dienst -> klicke auf Start für myService, aber es wird angehalten und das folgende Dialogfeld wird angezeigt

Windows konnte den myService-Dienst auf dem lokalen Computer nicht starten. Der Dienst hat keinen Fehler zurückgegeben. Dies kann ein Windows-Fehler oder ein interner Servicefehler sein. Wenn das Problem weiterhin besteht, wenden Sie sich an Ihren Systemadministrator.

  1. Wie kann ich das beheben?
  2. Gibt es eine andere Möglichkeit, dies zu tun, ohne manuelle Schritte auszuführen und ohne Tools von Drittanbietern zu verwenden?
  3. Ich mache das alles unter Windows 10. Brauche ich einen Server, um diese Aufgabe auszuführen?

HINWEIS: Ich kann in meinem Fall weder Always up noch Window Scheduler verwenden.

miki
quelle
Eine Problemumgehung kann mit einer einfachen EXE-Datei oder einem in eine EXE-Datei konvertierten Stapelskript verwendet werden, das auf eine Stapeldatei verweist, und die Logik der Stapeldatei kann entsprechend angepasst werden. Ich habe das schon mal mit CMD-Dateien gemacht, die in exe konvertiert wurden, und auch mit AutoIT exe, das auf eine Batch-Datei verweist. Wenn ich das noch einmal machen müsste, würde ich testen, ob der vollständige Pfad der Batch-Datei an die Exe übergeben wird und ob scdie Exe mit einem übergebenden Argument oder ähnlichem aufgerufen werden kann. Ich bin nicht sicher, womit Sie logisch arbeiten, aber ich habe persönlich ähnlich einfache Aufgaben erledigt.
Pimp Juice IT
Bei McDonald's verwendet Miki NSSM (Non Sucking Service Manager), einen Wrapper um alle ausführbaren Dateien oder Skripts, damit sie als Dienst verwendet werden können.
andyb
Sie suchen nach Produktlernmaterialien, in denen erläutert wird, warum NSSM diesen Dienst unter Windows nicht verwaltet oder Sie den Dienstprozess verwenden sc.exeund / oder services.mscverwalten.
Pimp Juice IT
Bei mcdonald's habe ich gelesen, dass Miki versucht hat, die Batch-Datei als Dienst mit 'SC' zu installieren, aber festgestellt hat, dass dies nicht funktionieren würde. Dann suchte er nach einer Lösung und stieß auf NSSM. Diese App fungiert als Wrapper für Nicht-Service-Apps und ist intelligent genug, um CMD.EXE zum Starten von Batch-Dateien zu verwenden. Dies alles wird auf der NSSM-Website behandelt. Ich habe es selbst mit einer Batch-Datei versucht, und es funktioniert.
andyb
@andyb Vielleicht scheint mir das ja noch ein bisschen unklar zu sein, also werden wir sehen, was das OP usw. sagt, wenn / wenn sie zurückkommen.
Pimp Juice IT

Antworten:

2

Das NSSM-Verhalten wird dadurch verursacht, dass das Skript fast sofort beendet wird. Versuchen Sie folgendes Skript:

echo Hello World
pause

Dadurch sollte der Dienst gestartet werden können, es wird jedoch nicht unbedingt ein Konsolenfenster angezeigt. Selbst wenn Sie "Service mit Desktop interagieren lassen" aktivieren, ist dies nicht Ihr Desktop, mit dem er interagiert!

Mit SysInternals Process Explorer können Sie den NSSM-Dienst anzeigen, der mit einem untergeordneten CMD-Prozess ausgeführt wird, der das Skript ausführt.

Windows implementiert die "Sitzungs-Null-Isolation" als Sicherheitsfunktion, wodurch im Wesentlichen verhindert wird, dass Dienste mit Endbenutzer-Desktops interagieren.

In Bezug auf eine Lösung ist es möglich, Windows-Dienstanwendungen ziemlich einfach mit Visual Studio zu schreiben. Es liegt außerhalb meines Fachgebiets, aber basierend auf den mir vertrauten Windows-Anwendungen wird im Allgemeinen eine Anwendung im Benutzermodus ausgeführt, um Desktop-Interaktion bereitzustellen. Die Benutzermodusanwendung kann mit Diensten interagieren, die von der Dienstanwendung gehostet werden.

andyb
quelle
1

Ein Windows-Dienst ist ein ausführbares Programm, das einige Standardereignisse unterstützen muss (z. B. OnStart OnStop, OnPause, OnContinue). Eine .bat-Datei ist keine ausführbare Datei und wird niemals als Dienst ausgeführt.

Wenn Sie die bat-Datei ausführen, heißt das aktuelle Programm cmd.exe, unterstützt jedoch nicht das erforderliche Ereignis.

Sie könnten einen Windows-Dienst schreiben (mit C ++ oder C # oder vielen anderen Sprachen) und dann den Dienst so programmieren, dass eine bat-Datei in cmd.exe ausgeführt wird. Ihre bat-Datei würde jedoch nicht funktionieren, da ein Dienst keinen Zugriff auf den Bildschirm oder die Tastatur hat.

TL; DR: Es wird einfach nicht funktionieren. Vielleicht, wenn Sie eine andere Frage dazu stellen, was Sie tatsächlich versuchen? Es hört sich so an, als ob Sie einen Dienst als Lösung betrachten und das Problem nicht beschrieben haben.

simon bei rcl
quelle
1
OP verwendet NSSM, mit dem Batch-Dateien als Dienste ausgeführt werden können. In diesem Fall schlägt der Vorgang fehl, da der Stapel fast sofort beendet wird. Das Standardverhalten von NSSM besteht darin, in einen angehaltenen Zustand zu wechseln, wenn dieses Verhalten angezeigt wird.
Andy