Как правильно использовать метод WaitForSingleObject, чтобы дождаться завершения внешней программы?

Я пытаюсь запустить внешнее приложение с повышенным статусом и подождать, пока оно не завершится, прежде чем продолжить:

var
  FProcess: THandle;
  ExecInfo: TShellExecuteInfo;
begin

  FillChar(ExecInfo, SizeOf(ExecInfo), 0);
  with ExecInfo do
  begin
    cbSize := SizeOf(ExecInfo);
    fMask := 0;
    Wnd := AWindow;
    lpVerb := 'runas';
    lpFile := PChar(APath);
    lpParameters := PChar(AParams);
    lpDirectory := PChar(AWorkDir);
    nShow := SW_NORMAL;
  end;

  Result := ShellExecuteEx(@ExecInfo);

  if Wait then
  begin
    while WaitForSingleObject(ExecInfo.hProcess, INFINITE) <> WAIT_TIMEOUT do
      Application.ProcessMessages;
  end;

Это запускается, но продолжает ждать. Вызывающая программа никогда не продолжается дальше вызов WaitForSingleObject даже после выхода вызываемой программы.

Я пробовал WAIT_OBJECT_0 вместо WAIT_TIMEOUT, но у меня та же проблема. Что я здесь делаю не так?

9
задан croceldon 10 March 2011 в 14:35
поделиться