Obtenir le code de sortie d'une application a commencé avec la “cmd” et “démarrer” commandes

J'ai une application console. L'Interaction avec cette application se fait via le protocole TCP/IP.

J'ai aussi un framework de test, ce qui est essentiellement une collection de scripts BATCH (...pas de ma faute). Ce que ce framework de test pour chaque test est essentiellement ceci:

  1. start /min "myapplication.exe" et attendre jusqu'à ce que la vérification est reçue que l'application est en cours d'exécution.
  2. envoyer des commandes via TCP/IP à la présente demande, de recevoir ses réponses, et de vérifier si les horaires et les valeurs d'accord avec ce qui est prévu par le test spécifique.

Un problème que je rencontre actuellement est que l'application se ferme prématurément en raison d'une erreur interne. Je tient à faire la distinction entre l'échec des tests, et l'application de s'écraser. La seule indication que j'ai pour ce, qui est de l'application du code de sortie.

Donc, j'ai essayé le suivant:

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

et puis plus tard, dans les scripts de test,

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

mais pour une raison étrange, le fichier texte n'apparaît jamais, même si parfois, j'ai une boîte de dialogue à propos de l'application de s'écraser, et même si j'ai la force de le faire échouer avec un code de sortie non nulle. Le test va juste par do_processing et (bien sûr) des résultats de l'échec.

MODIFIER
Quand je lance

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

Je parfois obtenir un fichier texte contenant la chaîne de caractères 9009, mais d'autres fois ce fichier texte contient la chaîne de caractères 0, ou parfois 1, ...qu'est-Ce...?!

EDIT2
Si vous tapez

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

(note de l' /k option), à vous de voir 0 être imprimé dans la nouvelle fenêtre, mais si vous tapez echo %errorlevel%, vous obtenez 1....

Je savais que le lot n'était pas très sain d'esprit, mais il devrait au moins être constamment fou...

Toutes les idées sur ce qui pourrait se passer ici?

Vous devez utiliser l'option /option d'attente pour obtenir un code de sortie. Qui doit vaincre le point de l'utilisation de commencer en premier lieu. Éviter le feu et oublier lors de la vérification des erreurs est nécessaire.
Passant: je pense que cela ne marchera pas, parce que si vous utilisez start le code de sortie ne sera pas transmis au script appelant. Vous devez utiliser call à la place. Il se comporte comme start /wait mais transmet des variables. Vérifiez ceci: stackoverflow.com/questions/13257571/...
mais start /wait signifie l'exécution du script se bloque. Le script peut pas aller sur le feu commandes...
J'ai appelé début (pour être en mesure à l'arrière-plan la tâche) en combinaison avec cmd (pour être en mesure de délivrer les 2 commandes; l'exécutable, en plus de l'écho que des sorties vers un fichier).

OriginalL'auteur Rody Oldenhuis | 2015-02-04