Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Зависание ShellExecuteEx + WaitForSingleObject


Автор: Keeper89 2.9.2013, 20:14
Доброго времени суток.

Для запуска сторонней программы и ожидания ее заверщения использую следующий код:
Код

    procedure RunFileAsAdminWait(hWnd: HWND; aFile: string);
    var
      sei: TShellExecuteInfo;
    begin
      FillChar(sei, SizeOf(sei), 0);
      sei.cbSize := SizeOf(sei);
      sei.Wnd := hWnd;
      sei.fMask := SEE_MASK_FLAG_NO_UI or SEE_MASK_NOCLOSEPROCESS;
     
      sei.lpVerb := 'runas' // при open тоже самое
     
      sei.lpFile := PChar(aFile);
      sei.lpParameters := PChar('');
      sei.nShow := SW_SHOWNORMAL;
     
      if not ShellExecuteEx(@sei) then
        RaiseLastOSError;
      if sei.hProcess <> 0 then begin
        while WaitForSingleObject(sei.hProcess, 50) = WAIT_TIMEOUT do
          Application.ProcessMessages;
        CloseHandle(sei.hProcess);
      end;
    end;

При этом на Висте и выше выскакивает UAC, в котором если нажать да - все ОК, а вот если нет - приложение виснет намертво. В чем тут может быть причина? 

Автор: Illusion Dolphin 2.9.2013, 20:44
У меня если нажать на что угодно кроме Yes выпыдает обычная ошибка, т.е. RaiseLastOSError и всё, никаких зависаний. Call-stack в момент зависания смотрели?

Автор: Keeper89 2.9.2013, 22:06
Illusion Dolphin, 
пересобрал приложение в Windows 7 (вместо XP) - все пошло нормально. Странно...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)