Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Console app

9.0K
12 апреля 2006 года
Yurezxxx
18 / / 21.08.2005
Из оконного приложения запускаю консольное(утилитку), как получить обратно код завершения
или вывод утилитки, или накрайняк, как узнать о
ненормальном завершении
5
12 апреля 2006 года
hardcase
4.5K / / 09.08.2005
Цитата:
Originally posted by Yurezxxx
Из оконного приложения запускаю консольное(утилитку), как получить обратно код завершения
или вывод утилитки, или накрайняк, как узнать о
ненормальном завершении


Так. получить, что консольная программа выбросила в StdOutput или StdError можно здесь --> http://sources.codenet.ru/?cid=3 Когда-то выкладывал код. Почитай, там всё просто.

А чтобы получить код завершения, вот тебе программа:

Код:
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.

идея - запустить процесс в режиме отладки и поймать дебаг-событие завершения процесса. вместе с этим событием получит и код завершения. Аналогично можно словить все эксепшны, генерируемые в процессе ненормальной работы процесса.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог