Код возврата

Тема в разделе "Delphi - Система", создана пользователем AnthonySoprano, 22 сен 2010.

  1. AnthonySoprano

    AnthonySoprano New Member

    Регистрация:
    25 июл 2010
    Сообщения:
    4
    Симпатии:
    0
    Что требуется:

    Необходимо запустить процесс, дождаться его завершения, и определить - если приложение было завершено с ошибкой, то выдавать, например, одно сообщение, если завершено правильно - другое...
    Например, запускается инсталлятор: при выходе без установки надо показать соответствующее сообщение. Если установка была совершена - ничего не показываем. На деле приложение может быть любым, не только инсталлятором.
     
  2. Dimka Inc

    Dimka Inc Гость

  3. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    Ну... если прямо таки любым... :)

    Код (Delphi):
    function ExecuteAndWait(FileName: string; HideApplication: Boolean; out ProcessExitCode: Cardinal): Boolean;
    var
    StartupInfo: TStartupInfo;
    ProcessInfo: TProcessInformation;
    begin
    FillChar(StartupInfo, SizeOf(StartupInfo), 0);
    with StartupInfo do
    begin
    cb := SizeOf(StartupInfo);
    dwFlags := STARTF_USESHOWWINDOW;
    wShowWindow := SW_SHOW;
    end;
    if not CreateProcess(nil, PChar(FileName), nil, nil, False,
    CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil,
    StartupInfo, ProcessInfo) then
    Result := False
    else
    begin
    if HideApplication then
    begin
    Application.Minimize;
    ShowWindow(Application.Handle, SW_HIDE);
    WaitforSingleObject(ProcessInfo.hProcess, INFINITE);
    end
    else
    begin
    while (WaitforSingleObject(ProcessInfo.hProcess, 100) = WAIT_TIMEOUT) do
    begin
    Application.ProcessMessages;
    if Application.Terminated then
    TerminateProcess(ProcessInfo.hProcess, 0);
    end;
    end;
    GetExitCodeProcess(ProcessInfo.hProcess, ProcessExitCode);

    Result := (ProcessExitCode = 0);

    if HideApplication then
    begin
    ShowWindow(Application.Handle, SW_SHOW);
    Application.Restore;
    Application.BringToFront;
    end;
    end;
    end;
    Пример использования:
    Код (Delphi):
    procedure TForm1.Button1Click(Sender: TObject);
    var
    s: string;
    ProcessExitCode: Cardinal;
    HideMe: Boolean;
    begin
    s := 'C:\WINDOWS\system32\calc.exe';    // Процесс который надо запустить
    HideMe := True;                      // надо ли спрятать (нашу!) форму пока выполняется процесс
    if not ExecuteAndWait(s,HideMe, ProcessExitCode) then
    ShowMessage('чет не запускается!')
    else
    ShowMessage('Процесс запустился нормально. Завершился с кодом: '+ IntToStr(ProcessExitCode));

    end;
    ProcessExitCode = 0 (ноль) - это значит процесс нормально (штатно) отработал и завершился.
    Любое значение больше нуля - это собственно тот самый код ошибки на которой "упал" процесс.
     
Загрузка...

Поделиться этой страницей