EXE崩溃时如何避免提示

时间:2013-09-02 19:04:39

标签: matlab batch-file crash exe

我在MATLAB中运行优化算法,我正在调用批处理文件(调用EXE文件)来为MATLAB中的每次迭代执行任务。我希望这个EXE在MATLAB中的代码继续下一次迭代之前运行和关闭。到目前为止,我已经使用批处理文件中的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的速度取决于我可能在其输入文件中修改的许多因素)。

我是新手使用批处理文件,我们非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

如果Ostrich.exe属于您的话,您通常会在代码中使用SetErrorMode()

否则,除了一般禁用错误报告之外,您可以使用WerAddExcludedApplication()禁用每个应用程序的错误报告。

答案 1 :(得分:0)

@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
)