Просто фантастика какая-то! Приведи код.
← →
Набережных С. ( 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
Любые ответы на любые вопросы
Чтобы внутри скрипта вернуть код возврата, нужно написать
EXIT /b [code]
Потом его можно обработать также, как и любой другой код возврата из сторонней программы.
Ответ написан более трёх лет назад
Нравится 3 Комментировать
Источник: qna.habr.com
Как получить код завершения приложения из командной строки Windows?
Googled для «Win8 Как получить приглашение CMD для отображения состояния выхода», как мы можем сделать в Linux. Это был лучший выбор, и это точно.
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 .
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