我有一个控制台应用程序,通过TCP/IP与其交互。
我还有一个测试框架,基本上是一组批处理脚本(...不是我的错)。该测试框架对于每个测试所做的事情基本上是:
start /min "myapplication.exe"
并等待收到验证消息以确认应用程序已启动并运行。- 通过TCP/IP发送命令到此应用程序,接收其回复,并检查时间和值是否与特定测试所期望的相符。
我目前遇到的一个问题是,由于某些内部错误,应用程序会过早地退出。我想区分失败的测试和应用程序崩溃的情况。我唯一的指示是应用程序的退出代码。
所以,我尝试了以下操作:
start /min cmd /c "myapplication.exe || echo %errorLevel% > exitcode.txt"
然后在测试脚本中稍后执行:
if exist exitcode.txt (
set /p exitcode=<exitcode.txt
echo ERROR: myapplication.exe returned exitcode %exitcode%.
goto error
) else (
goto do_processing
)
但由于某种奇怪的原因,文本文件从未出现,即使有时我会收到有关应用程序崩溃的对话框,即使我强制它失败并返回已知的非零退出代码。测试只是通过do_processing
,结果当然会失败。
编辑 当我运行
start /min cmd /c "nonsense || echo %errorLevel% > test.txt"
我有时会得到一个包含字符串9009的文本文件,但其他时间该文本文件包含字符串0
,或者有时是1
,...这是什么情况?!
编辑2 如果您键入
cmd /k "nonsense || echo %errorLevel%"
(注意/k
选项),您将在新窗口中看到打印出0
,但如果您随后键入echo %errorlevel%
,则会得到1
...
我知道批处理不太健全,但它至少应该是一致地疯狂...
对此有什么想法吗?
start
,退出代码将不会传递给调用脚本。你应该使用call
代替。它的行为类似于start /wait
但可以传递变量。请参考此链接:https://dev59.com/ZGYr5IYBdhLWcg3w8-vA - MichaelSstart /wait
意味着脚本执行将会阻塞。因此,脚本无法继续对其发出命令... - Rody Oldenhuis