Matlab 如何避免EXE崩溃时出现提示

Matlab 如何避免EXE崩溃时出现提示,matlab,batch-file,crash,exe,Matlab,Batch File,Crash,Exe,我正在MATLAB中运行一个优化算法,我正在调用一个批处理文件(它调用一个EXE文件)来为MATLAB中的每个迭代执行一个任务。我希望在MATLAB中的代码继续下一次迭代之前运行并关闭这个EXE。到目前为止,我已经在批处理文件中使用了START/WAIT命令,它们可以正常工作。以下是我的例子: @echo off @TITLE Ostrich - Optimizaton Software Toolkit REM Launch Ostrich,wait until it completes ST

我正在MATLAB中运行一个优化算法,我正在调用一个批处理文件(它调用一个EXE文件)来为MATLAB中的每个迭代执行一个任务。我希望在MATLAB中的代码继续下一次迭代之前运行并关闭这个EXE。到目前为止,我已经在批处理文件中使用了START/WAIT命令,它们可以正常工作。以下是我的例子:

@echo off
@TITLE Ostrich - Optimizaton Software Toolkit

REM Launch Ostrich,wait until it completes
START /WAIT "OSTRICH" /MIN Ostrich.exe

echo Done! > OstDone.txt
现在我的问题来了。如果Ostrich.exe崩溃,我会收到提示,要求我调试或关闭程序。这意味着当我运行这个算法时,我必须在场并观看屏幕(不方便,我在一个有时很慢的EXE上运行了1000多次迭代)。在MATLAB代码继续之前,我必须关闭程序

现在,如果我去掉了/WAIT部分,请添加一个计时器并执行以下操作:

@echo off
@TITLE Ostrich - Optimizaton Software Toolkit

REM Launch Ostrich
START "OSTRICH" /MIN Ostrich.exe

REM Wait 2 seconds
ping localhost -n 2 -w 2500 > nul

REM If it takes more than 2 seconds it has probably crashed. Exit:
if %errorlevel% neq 0 exit /b %errorlevel%
上面的代码引入了新的问题。首先,我必须估计每次运行EXE所需的时间(这不是一个固定的时间量,因此我必须设置一个上限),错误检查行无法关闭EXE(可能只是关闭批处理文件,这并不理想)

在第二个代码下,如果EXE崩溃,则会出现提示。但是,MATLAB循环将继续,并且EXE的新实例将在新窗口中运行。如果我遇到足够多的崩溃,我会在MATLAB循环结束时打开几个提示。就整体算法而言,这不是什么大问题,但也不理想

基本上,我想编写一些代码,在EXE文件崩溃时关闭并重新运行它,或者只是关闭它(没有调试或关闭提示),同时仍然使用/WAIT命令,因为它允许我利用一些快速的EXE运行(EXE的速度取决于我可能在其输入文件中修改的许多因素)

我不熟悉使用批处理文件,如有任何帮助,我将不胜感激。

如果Ostrich.exe是您的,您通常会在代码中使用


<>否则,除了禁用错误报告之外,您可能会禁用每个应用程序的错误报告。

Ostrich.exe不是我的,而且我对C++不太熟悉。我试图通过操作中心禁用Ostrich.exe的错误报告,但当它崩溃时,我仍然得到提示。有没有办法从批处理文件中检测崩溃并关闭它,然后重新运行它?谢谢,这确实消除了额外的EXE实例,这些实例已经崩溃并且不会关闭,但是它不会抑制错误提示,所以最后我仍然会收到几个错误提示。同样仅供参考,我的for循环在MATLAB中,批处理文件的目的是只运行一次。我想这是我能做的最好的了。在START中使用/WAIT命令时有没有办法做到这一点(比如在检查错误时,然后使用taskkill而不使用计时器)?我不懂Matlab。将其作为标记包含可能会很有用。
@echo off
@TITLE Ostrich - Optimization Software Toolkit

for /L %%a in (1,1,1000) do (
REM Launch Ostrich
START "OSTRICH" /MIN Ostrich.exe

REM Wait 2 seconds
ping -n 2 localhost>nul

REM kill ostrich if it is running or not, and pause for 2 more seconds
taskkill /f /im "ostrich.exe" >nul 2>&1
ping -n 2 localhost>nul
)