Comment puis-je utiliser correctement le WaitForSingleObject méthode attendre d'un programme externe pour mettre fin?

Je suis en train de lancer une application externe avec statut plus élevé, et d'attendre jusqu'à la sortie avant de poursuivre:

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;

Ce lance, mais il ne cesse d'attente. Le programme appelant ne jamais se poursuit après l'appel à WaitForSingleObject, même après le programme des sorties.

J'ai essayé WAIT_OBJECT_0 au lieu de WAIT_TIMEOUT, mais j'ai le même problème. Ce que je fais mal?

Ce processus êtes-vous en train de s'exécuter? Êtes-vous sûr qu'il a réussi? Si oui, êtes-vous sûr que vous avez un descripteur valide? Il y a beaucoup de choses qui pourraient aller mal dans ce code avant de vous jamais arriver à la partie que vous souhaitez savoir. Assurez-vous de poser des questions sur la bonne chose. Et si la WaitForSingleObject retours d'appel, ce n'est pas de retour Wait_Timeout; de sorte que est - il de retour?

OriginalL'auteur croceldon | 2011-03-10