program exitcode;
{$APPTYPE CONSOLE}
uses
Windows,
Messages,
SysUtils;
procedure StartApp(const AppName: string);
var Si: STARTUPINFO;
Pi: PROCESS_INFORMATION;
De: DEBUG_EVENT;
begin
WriteLn('Starting "',AppName,'"');
ZeroMemory(@Si, sizeof(Si));
Si.cb:=sizeof(Si);
if CreateProcess(PChar(AppName), '', nil, nil, false,
DEBUG_PROCESS or DEBUG_ONLY_THIS_PROCESS,
nil, nil, Si, Pi) then begin
repeat
if WaitForDebugEvent(De, INFINITE) then begin
if (De.dwProcessId = Pi.dwProcessId) and
(De.dwDebugEventCode = EXIT_PROCESS_DEBUG_EVENT) then begin
WriteLn('ExitCode: ', De.ExitProcess.dwExitCode);
Break;
end;
ContinueDebugEvent(De.dwProcessId, De.dwThreadId, DBG_CONTINUE);
end;
until false;
WriteLn('process terminated');
end else begin
WriteLn('unable to create process');
end;
end;
var
App: string;
begin
while true do begin
WriteLn('type application name (or press ENTER to exit):');
ReadLn(App);
App:=Trim(App);
if App = '' then Exit;
StartApp(App);
end;
end.
Console app
или вывод утилитки, или накрайняк, как узнать о
ненормальном завершении
Цитата:
Originally posted by Yurezxxx
Из оконного приложения запускаю консольное(утилитку), как получить обратно код завершения
или вывод утилитки, или накрайняк, как узнать о
ненормальном завершении
Из оконного приложения запускаю консольное(утилитку), как получить обратно код завершения
или вывод утилитки, или накрайняк, как узнать о
ненормальном завершении
Так. получить, что консольная программа выбросила в StdOutput или StdError можно здесь --> http://sources.codenet.ru/?cid=3 Когда-то выкладывал код. Почитай, там всё просто.
А чтобы получить код завершения, вот тебе программа:
Код:
идея - запустить процесс в режиме отладки и поймать дебаг-событие завершения процесса. вместе с этим событием получит и код завершения. Аналогично можно словить все эксепшны, генерируемые в процессе ненормальной работы процесса.