Как запустить программу и дождаться ее закрытия?

Delphi FAQ >> Окна

Иногда может потребоваться запустить стороннею программу, дать ей отработать (или дать пользователю в ней поработать) и затем продолжить выполнение своей программы. Такую схему можно наблюдать в апплете Windows «Установка и удаление программ» (мы даже как-то реализовывали функционал этого апплета). Ниже приведена функция на языке программирования Delphi, которая запускает указанный процесс, ждет его завершения и возвращает управление в программу:


function StartAndWait(cmdline: String): Boolean;
var
  si: Startupinfo;
  pi: Process_information;
begin
  result := false;
  zeromemory( @si,sizeof(si) );
  si.cb := sizeof(si);
  //пробуем создать процесс, используя заданную командную строку
  //в случае неудачи выходим из функции с результатом False
  if not createprocess( nil, pchar(cmdline), nil, nil, false, 0, nil, nil, si, pi ) then
    exit;
  //ждем пока процесс не завершится
  //infinite - означает, что ждем без ограничения во времени
  WaitForSingleObject( pi.hprocess, infinite );
  //завершаем процесс
  closehandle( pi.hprocess );
  closehandle( pi.hthread );
  //возвращаем True
  Result := True;
end;


Если вы студент, то интересная работа для студентов в Киеве вас может заинтересовать.