Как узнать код возврата программы

Просто фантастика какая-то! Приведи код.

← →
Набережных С. ( 2002-02-13 14:40 ) [4]

GetExitCodeProcess вернет ноль в случае сбоя. А раз нет ошибки, то и цикл не завершается.
Нужно until result <> STILL_ACTIVE;

result:=WaitForSingleObject(Proc_Inform.hProcess,INFINITE);//

memo1.Lines.Add(IntToStr(result));
end;

← →
Юрий Зотов (M) ( 2002-02-13 15:05 ) [6]

Тяжелый случай. Но даже при таком количестве ляп F1 обычно помогает. Например, с чего Вы взяли, что WaitForSingleObject
возвращает код завершения? Разве в SDK ЭТО написано?

А Ваша программа стоит и ждет, пока запущенное им приложение не завершится (поэтому, наверное, Вы и решили что все замедлилось). Но Вы же хотите получить код завершения — а КАК можно его получить, не дождавшись этого самого завершения? Никак, конечно.

← →
Юрий Зотов (M) ( 2002-02-13 16:14 ) [10]

Фантастика. В чем дело, не знаю, но уж точно не в этом коде.

Посмотреть код возврата в cmd

Похоже, вот это 40 секунд и длится.

Источник: delphimaster.net

Как получить код выполнения bat файла?

Добрый день. Есть некий bat файлик, в котором выполняется прошивка avreal’ом. Но не в этом суть. Как получить статус выполнения этого bat скрипта. Завершился ли он с ошибкой и прочее.

  • Вопрос задан более трёх лет назад
  • 444 просмотра

Решения вопроса 0

Ответы на вопрос 2

gbg

Любые ответы на любые вопросы

Чтобы внутри скрипта вернуть код возврата, нужно написать
EXIT /b [code]
Потом его можно обработать также, как и любой другой код возврата из сторонней программы.

Ответ написан более трёх лет назад

Нравится 3 Комментировать

Источник: qna.habr.com

Как получить код завершения приложения из командной строки Windows?

Googled для «Win8 Как получить приглашение CMD для отображения состояния выхода», как мы можем сделать в Linux. Это был лучший выбор, и это точно.

Читайте также:
Waifu2x как пользоваться программой

SDsolar 21 май 2018, в 20:33
Вы можете быстро увидеть, что возвращает приложение: app.exe = 1. Так что «errorlevel 0» будет соответствовать всему. Видишь ли, если /?». Вместо этого вы можете использовать «if% ERRORLEVEL% EQU 0 (..)».

Curtis Yallop 29 июль 2014, в 16:06

Обнаружены случаи, когда %ERRORLEVEL% равен 0, даже если произошла ошибка. Произошло при проверке %ERRORLEVEL% в файле cmd. Попытка start /wait не сработала. Единственное, что сработало, это if errorlevel 1 (. )

AlikElzin-kilaka 13 апр. 2015, в 12:57
% errorlevel%, по-видимому, недоступен в Power Shell .
Ghita 27 май 2015, в 08:02

Дружественный совет:% ErrorLevel% — это переменная оболочки, а не переменная окружения, и она также возвращает string не int , что означает, что вы не можете эффективно использовать EQ / NEQ .

Реверсинг python программы, почему python не безопасен

kayleeFrye_onDeck 24 сен. 2016, в 00:27
Интересно, можно ли это вставить в подсказку, как в bash?
SDsolar 26 май 2018, в 02:21
Показать ещё 5 комментариев

Тестирование ErrorLevel работает для консольных приложений, но, как намекнул dmihailescu, это не сработает, если вы пытаетесь запустить оконное приложение (например, Win32) из командной строки. Окно приложения будет работать в фоновом режиме, и элемент управления немедленно вернется в командную строку (скорее всего, с ErrorLevel равным нулю, чтобы указать, что процесс был успешно создан). Когда оконное приложение заканчивается, его статус выхода теряется.

Однако вместо использования пусковой установки C++, упомянутой в другом месте, более простая альтернатива заключается в том, чтобы запустить оконное приложение с помощью команды командной строки START/WAIT . Это запустит оконное приложение, дождитесь его выхода и вернет управление в командную строку с статусом выхода процесса, установленного в ErrorLevel .

Читайте также:
Программа которая вычисляет площадь и периметр прямоугольника по длинам 2 его сторон

start /wait something.exe echo %errorlevel%
Gary 13 июль 2012, в 19:19
Поделиться
Большое спасибо за идею «START / wait». Это сработало для меня 🙂

Timotei 16 июль 2012, в 18:56

Хорошо поймал. Я не знал об этой команде. Я только что видел, как это работает для> запуска / ожидания notepad.exe

dmihailescu 23 янв. 2013, в 18:48

Еще одна причина, по которой он может не работать (всегда ноль), это когда он внутри if или for . Подумайте об использовании !errorlevel! вместо этого, как описано в этом ответе .

Roman Starkov 08 апр. 2015, в 22:36
Показать ещё 1 комментарий

Используйте встроенную переменную ERRORLEVEL:

echo %ERRORLEVEL%
Adam Rosenfield 02 дек. 2008, в 19:33
Поделиться

Это не фактическая переменная окружения (что, очевидно, почему она перестает работать , если есть переменная с именем , что путь).

Joey 26 июнь 2010, в 08:13
обратите внимание, что это не работает в powershell
Steel Brain 26 окт. 2014, в 15:32
Alex A. 09 март 2015, в 15:21
Показать ещё 1 комментарий

Если вы хотите точно соответствовать коду ошибки (например, равно 0), используйте это:

if errorlevel 0 соответствует errorlevel > = 0. См. if/? ,

Curtis Yallop 29 июль 2014, в 17:12
Поделиться
Это с учетом регистра?
Nishant 13 авг. 2018, в 15:16

Нет. Vars, команды (включая «if») и «equ» работают независимо от ситуации.
Curtis Yallop 16 авг. 2018, в 13:51

Он может работать неправильно при использовании программы, которая не подключена к консоли, поскольку это приложение все еще может работать, пока вы думаете, что у вас есть код выхода. Решение для этого в С++ выглядит следующим образом:

#include «stdafx.h» #include «windows.h» #include «stdio.h» #include «tchar.h» #include «stdio.h» #include «shellapi.h» int _tmain( int argc, TCHAR *argv[] ) < CString cmdline(GetCommandLineW()); cmdline.TrimLeft(‘»‘); CString self(argv[0]); self.Trim(‘»‘); CString args = cmdline.Mid(self.GetLength()+1); args.TrimLeft(_T(«» «)); printf(«Arguments passed: ‘%ws’n»,args); STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( si.cb = sizeof(si); ZeroMemory( if( argc < 2 ) < printf(«Usage: %s arg1,arg2. n», argv[0]); return -1; >CString strCmd(args); // Start the child process. if( !CreateProcess( NULL, // No module name (use command line) (LPTSTR)(strCmd.GetString()), // Command line NULL, // Process handle not inheritable NULL, // Thread handle not inheritable FALSE, // Set handle inheritance to FALSE 0, // No creation flags NULL, // Use parent environment block NULL, // Use parent starting directory pi ) // Pointer to PROCESS_INFORMATION structure ) < printf( «CreateProcess failed (%d)n», GetLastError() ); return GetLastError(); >else printf( «Waiting for «%ws» to exit. n», strCmd ); // Wait until child process exits. WaitForSingleObject( pi.hProcess, INFINITE ); int result = -1; if(!GetExitCodeProcess(pi.hProcess,(LPDWORD) printf(«GetExitCodeProcess() failed (%d)n», GetLastError() ); >else printf(«The exit code for ‘%ws’ is %dn»,(LPTSTR)(strCmd.GetString()), result ); // Close process and thread handles. CloseHandle( pi.hProcess ); CloseHandle( pi.hThread ); return result; >

Читайте также:
Как правильно рассчитать навес из металла программа

Источник: overcoder.net

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru