|
#1
|
|||
|
|||
Обход UAC
Добрейшего уважаемые.
ОС Windows 10. UAC включен. Не получается из программы установить службу: ShellExecute(Application.Handle, 'open', PChar(ParamStr(0)), PChar('/INSTALL'), '', SW_HIDE); Error 5 - Отказано в доступе Если правой кнопкой-Запустить под админом, то все нормально. Как это обойти и сделать так, чтобы программа при запуске не требовала повышения прав, а при нажатии на кнопку Установить службу, требовала? |
#2
|
|||
|
|||
Нельзя сделать чтобы не требовало, можно поднять привелегии при помощи манифеста
Цитата:
Код:
function EnablePrivilege(const Value: Boolean; privilegename: string): Boolean; var hToken: THandle; tp: TOKEN_PRIVILEGES; d: dword; begin Result := False; if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, hToken) then begin tp.PrivilegeCount := 1; LookupPrivilegeValue(nil, pchar(privilegename), tp.Privileges[0].Luid); if Value then tp.Privileges[0].Attributes := $00000002 else tp.Privileges[0].Attributes := $80000000; AdjustTokenPrivileges(hToken, False, tp, SizeOf(TOKEN_PRIVILEGES), nil, d); if GetLastError = ERROR_SUCCESS then begin Result := true; end; CloseHandle(hToken); end; end; if EnablePrivilege(true, 'SeDebugPrivilege') then begin // do install end; |
#3
|
|||
|
|||
Код:
procedure TForm1.Button1Click(Sender: TObject); var ShellExecuteInfo: TShellExecuteInfo; begin ShellExecuteInfo.cbSize:= SizeOf(TShellExecuteInfo); ShellExecuteInfo.fMask:= 0; ShellExecuteInfo.Wnd:= 0; ShellExecuteInfo.lpVerb:= 'runas'; ShellExecuteInfo.lpFile:= PChar(ParamStr(0)); ShellExecuteInfo.lpParameters:= PChar('/INSTALL'); ShellExecuteInfo.lpDirectory:= nil; ShellExecuteInfo.nShow:= SW_SHOWNORMAL; ShellExecuteEx(@ShellExecuteInfo) end; |
#4
|
|||
|
|||
Цитата:
Вроде то, что нужно. А нужно эмулировать нажатие ПКМ-Запуск от имени администратора. Но при вызове Эксплорер выдает следующее: Цитата:
GetLastError() при этом выдает 0 Сам экзешник с параметром /INSTALL при ПКМ-Запуск от имени администратора отрабатывает без ошибок Последний раз редактировалось xteam777, 15.05.2018 в 19:28. |
#5
|
|||
|
|||
Добавил это. Проблема осталась.
Код:
ShellExecuteInfo.lpDirectory := PChar(ExtractFilePath(ParamStr(0))); Последний раз редактировалось xteam777, 15.05.2018 в 19:54. |
#6
|
|||
|
|||
Не совсем понятно конечно что за служба такая, тоже написана вами? это драйвер? что за служба? код службы есть?
|
#7
|
|||
|
|||
Прошу прощения. Какойто глюк был с виндой после обновлений. Сейчас все работает. Перезагрузка помогла.
|