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?
quelle
Antworten:
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.
quelle
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:
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:
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'):
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 :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'):
quelle