Immer den exit-code von einer Anwendung gestartet wird mit "cmd" und "start" - Befehle

Ich habe eine Konsole-Anwendung. Die Interaktion mit dieser Anwendung erfolgt über TCP/IP.

Ich habe auch ein test-framework für Sie, das ist im Grunde eine Sammlung von BATCH-Skripten (...nicht meine Schuld). Was dieser test framework wird für jeden test ist im Grunde so aus:

  1. start /min "myapplication.exe" und warten Sie, bis die überprüfung empfangen wird, dass die Anwendung betriebsbereit ist.
  2. senden von Befehlen über TCP/IP zu dieser Anwendung erhalten Sie Ihre Antworten, und überprüfen Sie, ob die timings und die Werte Stimmen mit dem, was erwartet wird, von der konkrete test.

Ein problem, ich bin derzeit noch ist, dass die Anwendung beendet vorzeitig aufgrund einiger interner Fehler. Ich möchte unterscheiden zwischen der fehlgeschlagenen tests und die Anwendung zum Absturz zu bringen. Die einzige Angabe, die ich für diese, ist die Anwendung der exit-code.

So, ich habe versucht, die folgenden:

start /min cmd /c "myapplication.exe || echo %errorLevel% > exitcode.txt"

und dann später in den test-Skripten,

if exist exitcode.txt (
    set /p exitcode=<exitcode.txt
    echo ERROR: myapplication.exe returned exitcode %exitcode%.
    goto error
) else (
    goto do_processing
)

aber aus irgendeinem seltsamen Grund, die text-Datei nicht angezeigt wird, obwohl ich manchmal ein dialog über die Anwendung Abstürzen, und obwohl ich zwangsweise machen es nicht mit einem bekannten nicht-null exit-code. Der test geht nur durch do_processing und (natürlich) zum Misserfolg.

BEARBEITEN
Wenn ich

start /min cmd /c "nonsense || echo %errorLevel% > test.txt"

Ich manchmal erhalten eine text-Datei, die den string 9009, aber auch andere Zeiten, die text-Datei enthält die Zeichenfolge 0 oder manchmal 1, ...Was zum...?!

EDIT2
Wenn Sie

cmd /k "nonsense || echo %errorLevel%"

(Hinweis: die /k option), sehen Sie 0 gedruckt in dem neuen Fenster, aber wenn Sie dann geben Sie echo %errorlevel% erhalten Sie 1....

Ich wusste batch war nicht sehr gesund, aber es sollte zumindest konsequent wahnsinnig...

Irgendwelche Ideen auf, was könnte hier Los?

Sie müssen verwenden Sie das /wait-option, um einen exit-code. Was sollte besiegen den Punkt der Anwendung beginnen in den ersten Platz. Vermeidung von Feuer-und-vergessen werden, wenn die Fehlerprüfung erforderlich ist.
Passant: ich denke, das wird nicht funktionieren, weil, wenn Sie verwenden start die der exit-code wird nicht an das aufrufende Skript. Sollten Sie verwenden call statt. Es verhält sich wie start /wait aber übergibt Variablen. Überprüfen Sie dies: stackoverflow.com/questions/13257571/...
aber start /wait bedeutet, dass die Skript-Ausführung blockiert werden. Das Skript kann dann nicht gehen, um Feuer Befehle an...
Ich rief starten (in der Lage sein, um den hintergrund der Aufgabe) in Kombination mit cmd - (in der Lage sein zu Problem 2 Befehle, die ausführbar ist, plus das echo, dass sich die Ausgaben in Datei).

InformationsquelleAutor Rody Oldenhuis | 2015-02-04

Schreibe einen Kommentar