Доброго времени суток.
Для запуска сторонней программы и ожидания ее заверщения использую следующий код:
| Код | 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, в котором если нажать да - все ОК, а вот если нет - приложение виснет намертво. В чем тут может быть причина? |