Как сделать чтобы программа ждала завершения bat-файла?
Есть некая внешняя программа которая запускается из bat-файла program.bat (внутри него prog.exe и еще что-то).
Мне надо, чтобы программа запустилась, что-то сделала, завершилась, и чтобы только после этого продолжилось выполнение основной программы.
Использую Dev C++ 5.11. Под Windows 7 все как надо, запускаю под Windows 10 (на другой машине) - увы, никакого ожидания, сразу продолжается выполнение, таким образом внешняя программа не успевает выдать результат.
Сама команда выглядит максимально просто: system("program.bat");
Думается, что это что-то очень простое и надо где-то что-то разрешить или поменять какой-то режим.
Кроме того. Ты должен не просто ждать завершения процесса но и взять код возврата. По нему определяется был ли успех или ошибка. Кроме того процесс возрващает 2 стрима. STDOUT, STDERR для детализации ошибок. Почитаешь сам по этому.
Насчет system не уверен. Это функция ОС Unix/Linux и ее вызов в Винде скорее всего будет просто обёрткой над CreateProcess. И какой там контроль над параметрами - чорт его знает. Наверное лучше брать native.
Да, я с этого начал,
пока правда непонятно какой там контроль над запущенным процессом.
Т.е. Creating Processes процесс создал... а дальше?
Сейчас нашел вот это: https://cplusplus.com/forum/beginner/25107/
пишут:
Pass pi.hProcess to GetExitCodeProcess.
Видимо с GetExitCodeProcess уже можно что-то сделать.
Как уже было сказано system() всегда выполняется синхронно, т.е. ждет окончания выполняемой программы.
В батнике аналогично - когда стартуете команду/программу обычным способом батник приостанавливается до завершения программы.
Так что описанного поведения по этим причинам быть не может.
Скорее всего проблема в чем-то другом.
В конце батника добавьте строку pause, чтоб он не закрывался сразу и посмотрите что выводится на консоль. Подозреваю, там будет какая-то ошибка. Может быть "file not found" или еще что-нибудь.
Пока всё странно. notepad.exe отработает как надо, моя программа почему-то не хочет.
pause в батник ставил - да, батник останавливается.
Как я уже писал - на машине с Windows 7 все работает как надо, а на Win 10 - нет. Сейчас попробую другие компы с Win 10.
--------------
В общем дело не в системе и не в батнике, а в самой программе которая запускается дочерним процессом. Другие версии этой программы отрабатывают нормально.
В чем причина такого поведения я так и не понял, но свою задачу решил.
Большое спасибо всем за помощь и обсуждение!