Wie wird ein Prozess im Hintergrund ausgeführt, ohne dass eine Batchdatei geöffnet bleibt?

18093
Jack Scott

Ich habe einen Windows-Dienst (den Bamboo-Integrationsserver), der eine Batchdatei als Unterprozess (Build-Job) dieses Skripts ausführt. In dieser Batch-Datei möchte ich einen Prozess starten (nennen wir ihn workerprocess.exe) und diesen Prozess im Hintergrund ausführen lassen. Das ist alles gut, ich habe verwendet:

start "title" /B workerprocess.exe 

Das ist alles gut und gut. Das Problem ist, dass dies den Abschluss des Build-Jobs verhindert. Das Batch-Skript wird zwar beendet, aber aufgrund des Unterprozesses workerprocess.exe weiß der Dienst (Bamboo) nicht, dass er beendet wurde: Er wartet immer noch auf die workerprocess.exe und zeigt deren Ausgabe an.

Ich habe in der Dokumentation nach dem Startbefehl gesucht und sehe nichts, was das kann, was ich will. Ich habe diese Frage gesehen, aber sie hat auch nicht wirklich geholfen - der Dienst wartet immer noch auf den Abschluss des Prozesses.

Ich schätze also zusammenfassend: Wie kann ich einen neuen Prozess aus einem Stapelverarbeitungsskript ausführen, so dass er vollständig getrennt ist und nichts aufhält, was darauf wartet, dass das Stapelverarbeitungsskript abgeschlossen wird.

6
Haben Sie es ohne den Parameter "/ B" versucht, damit der Prozess nicht innerhalb desselben Befehlsfensters gestartet wird? Josh vor 10 Jahren 1
@JoshR, das hat die Dinge verändert. Der Dienst empfängt keine Ausgabe mehr vom Prozess, wird jedoch weiterhin von diesem blockiert. Jack Scott vor 10 Jahren 0

2 Antworten auf die Frage

2
Sun

Haben Sie Hidden Start (HSTART) versucht ? (Kosten $ 20)

Ich benutze es persönlich, um einen stündlichen Batch-Job mit ausgeblendetem Fenster auszuführen. Sie erwähnen auch, dass Sie Befehle sequentiell als Parameter ausführen können (oder, wie ich annehme, standardmäßig) asynchron ausführen. Ich weiß nicht, wie sich dies auf Ihre Konkurrenz in Bezug auf CPU, Speicher oder Festplatte auswirkt. Die Software gibt Ihnen jedoch auch die Möglichkeit, einige Zeit zu warten, bevor Sie die Aktion ausführen.

Als ich im September 2013 meine Antwort schrieb, war das Produkt rundum kostenlos. Leider verlangen sie einen Preis. Sun vor 7 Jahren 0
2
npocmaka

Alle verknüpften Skripte können unter einem beliebigen Namen heruntergeladen und gespeichert werden.

1) Die IEXPRESS- Lösung akzeptiert als Argument nur den Befehl und seine Argumente.

Verwendungsbeispiel:

call hidder.bat myBat.bat myexe.exe call myexe.exe 

2) SCHTASKS - Erneut akzeptiert nur zwei Argumente - den Befehl und die Argumente. Er überprüft auch, ob er mit erhöhten Berechtigungen gestartet wurde, und ruft, wenn möglich, die PID des Prozesses mit dem Befehl WEVTUTIL ab.

Verwendungsbeispiel:

call SCHPhidden.bat "cmd /c myBat.bat" "argument" 

3) 'WScript.Shell' - das Skript ist voller Wrapper von 'WScript.Shell' und jede mögliche Option kann über die Befehlszeilenoptionen eingestellt werden. Es ist ein jscript / batch-Hybrid und kann als Fledermaus aufgerufen werden.

Verwendungsbeispiel (für weitere Informationen drucken Sie die Hilfe mit '-h'):

call ShellRunJS.bat "notepad.exe" -style 0 -wait no 

4) 'Win32_ProcessStartup' - wieder ist der vollständige Wrapper und alle Optionen über die Befehlszeilenargumente zugänglich. Diesmal handelt es sich um einen WSF / Batch-Hybrid mit einigen Jscript- und einigen VBScript-Codeteilen - es gibt jedoch die PID des gestarteten Prozesses zurück nicht ausgeblendet Einige Optionen wie X / Y-Koordinaten können verwendet werden.

Verwendungsbeispiel (für weitere Informationen drucken Sie die Hilfe mit '-h'.) Dies erfordert den vollständigen Pfad zur ausführbaren Datei / zum Skript, falls es nicht im folgenden Verzeichnis steht %path%:

call win32process.bat "notepad" -arguments "/A openFile.txt" -showWindow 0 -title "notepad" 

5) die. NET-Lösung . Die meisten Optionen der ProcessStartInfo-Optionen werden verwendet (aber am Ende war ich zu müde, um alles einzuschließen). Die PID sollte zurückgegeben werden.

Verwendungsbeispiel (für weitere Informationen drucken Sie die Hilfe mit '-h'):

call ProcessStartJS.bat "notepad" -arguments "/A openFile.txt" -style Hidden -directory "." -title "notepad" -priority Normal 
Der Link wird nicht gefunden Rahil Wazir vor 8 Jahren 0
@rahilwazir - bearbeitet. npocmaka vor 8 Jahren 0
Ich habe das ein bisschen ausprobiert - ich denke, die Details müssen einen großartigen Deal bereinigen. Schauen Sie sich nur den ersten Ansatz an: IExpress, der Link hidder.bat, wenn das obige Beispiel etwas anderes verwendet. Beim Ausführen des Skripts ist es mir nicht gelungen, nach einer EXE-Datei zu fragen, die oben nicht erwähnt wurde. Das könnte in Ordnung sein, wenn es einen Markdown auf github gab, aber es gibt keinen. Schließlich produzierte es einige .DDF-Dateien, aber sonst nichts. JoeG vor 7 Jahren 1