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


9

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

start "title" /B workerprocess.exe

Das ist alles schön und gut. Das Problem ist, dass dies dann den Abschluss des Build-Jobs verzögert. Das Batch-Skript wird also beendet, aber aufgrund des Unterprozesses workerprocess.exe weiß der Dienst (Bamboo) nicht, dass er beendet wurde: Er wartet immer noch auf die Datei workerprocess.exe (und zeigt die Ausgabe von ihr an).

Ich habe in der Dokumentation nach dem Startbefehl gesucht und kann nichts sehen, was das tut, was ich will. Ich habe diese Frage gesehen, aber es hat auch nicht wirklich geholfen - der Dienst wartet immer noch darauf, dass der Prozess abgeschlossen ist.

Zusammenfassend denke ich also: Wie kann ich einen neuen Prozess aus einem Batch-Skript ausführen, damit er vollständig getrennt wird und nichts aufhält, was zufällig auf den Abschluss dieses Batch-Skripts wartet?


1
Haben Sie es ohne den Parameter "/ B" versucht, damit der Prozess nicht im selben Befehlsfenster gestartet wird?
Josh

@ JoshR, das hat die Dinge verändert. Der Dienst empfängt keine Ausgabe mehr vom Prozess, wird jedoch weiterhin von diesem blockiert.
Jack Scott

Antworten:


2

Haben Sie Hidden Start (HSTART) ausprobiert ? (Kostet 20 $)

Ich persönlich verwende es, um einen stündlichen Stapeljob mit ausgeblendetem Fenster auszuführen. Sie erwähnen auch, dass Sie Befehle nacheinander ausführen können, wenn ein Parameter (oder standardmäßig, nehme ich an) asynchron ausgeführt wird. Ich weiß nicht, wie sich dies auf Ihre Konkurrenz auf CPU, Speicher oder Festplatte auswirkt. Die Software bietet 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 berechnen sie einen Preis.
So

3

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

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

Anwendungsbeispiel:

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

2) SCHTASKS - Akzeptiert wieder nur zwei Argumente - den Befehl und die Argumente. Überprüft auch, ob es mit erhöhten Berechtigungen gestartet wurde und erhält nach Möglichkeit die PID des Prozesses mit dem Befehl WEVTUTIL.

Anwendungsbeispiel:

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

3) 'WScript.Shell' - Das Skript ist ein vollständiger Wrapper von 'WScript.Shell' und jede mögliche Option kann über die Befehlszeilenoptionen festgelegt werden. Es ist ein jscript / Batch-Hybrid und kann als Fledermaus aufgerufen werden.

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

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

4) 'Win32_ProcessStartup' - wieder vollständiger Wrapper und alle Optionen sind über die Befehlszeilenargumente zugänglich. Diesmal ist es WSF / Batch-Hybrid mit einigen Jscript- und einigen VBScript-Codeteilen - aber es gibt die PID des gestarteten Prozesses zurück. Wenn Prozess-ID nicht ausgeblendet Einige Optionen wie X / Y-Koordinaten können verwendet werden.

Beispielanwendung (für weitere Informationen drucken Sie die Hilfe mit '-h'). Dies erfordert den vollständigen Pfad zur ausführbaren Datei / zum ausführbaren Skript, wenn es nicht in der %path%folgenden Datei enthalten ist :

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):

Anwendungsbeispiel (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 wurde nicht gefunden
Rahil Wazir

@rahilwazir - bearbeitet.
Npocmaka

1
Ich habe es ein bisschen versucht - ich denke, die Details müssen sehr gut aufgeräumt werden. Schauen Sie sich einfach den ersten Ansatz an: IExpress, der Link ist zu hidder.bat. Das obige Beispiel verwendet etwas anderes. Als ich das Skript ausführte, wurde ich nicht nach einer EXE gefragt, die oben nicht erwähnt wurde. Das könnte in Ordnung sein, wenn es einen Abschlag auf Github gab, aber es gibt keinen. Schließlich wurden beim Ausführen einige .DDF-Dateien erstellt, aber sonst nichts ....
JoeG
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.