CreateProcess вешает основной поток программы

Модераторы: Duncon, Naeel Maqsudov, Хыиуду, Игорь Акопян

Ответить
Shouldercannon
Сообщения: 74
Зарегистрирован: 08 июн 2008, 14:49

CreateProcess вешает основной поток программы

Сообщение Shouldercannon » 23 дек 2017, 21:22

Доброго времени суток!
Запускаю приложения так

Код: Выделить всё

procedure TFormMain.Button1Click(Sender: TObject);
begin
  FillChar(StartupInfo, SizeOf(StartupInfo), 0);
  FillChar(ProcessInfo, SizeOf(ProcessInfo), 0);
  StartupInfo.cb := SizeOf(StartupInfo);
  StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
  StartupInfo.wShowWindow := SW_SHOWNORMAL;
  if CreateProcess(nil,
                   PChar(Edit1.Text),
                   nil,
                   nil,
                   False,
                   CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,
                   nil,
                   PChar(ExtractFilePath(Edit1.Text)),
                   StartupInfo,
                   ProcessInfo) then
  begin
    WaitForSingleObject(ProcessInfo.hProcess, INFINITE); // Ждём завершения процесса
    CloseHandle(ProcessInfo.hThread);
    CloseHandle(ProcessInfo.hProcess);
  end;
end;
после чего основной поток повисает, пока не закрою созданное CreateProcess приложение. Отследить завершение работы приложения тоже надо. Как можно исправить данное положение?

Ответить