Я запускаю алгоритм оптимизации в MATLAB, и я вызываю пакетный файл (который вызывает файл EXE) для выполнения задачи для каждой итерации в MATLAB. Я хочу, чтобы этот EXE запускался и закрывался до того, как код в MATLAB продолжит следующую итерацию. До сих пор я использовал команды START/WAIT в пакетном файле, и они работают. Вот мой пример:Как избежать запроса при сбое EXE
@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, я получаю приглашение с просьбой отлаживать или закрывать программу. Это означает, что я должен присутствовать и смотреть экран, когда я запускаю этот алгоритм (не удобно, я использую более 1000 итераций на иногда медленном EXE). Мне нужно закрыть программу до того, как код 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 не является моим, и я не очень хорошо знаком с C++. Я попытался пройти Центр действий и отключить отчет об ошибках для Ostrich.exe, и я все еще получил приглашение, когда он разбился. Есть ли способ обнаружить сбой из пакетного файла и закрыть его и снова запустить его снова? – ymzkala