![]() |
|
|
|
|
#1
|
|||
|
|||
|
Добрейшего уважаемые.
ОС 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
|
|||
|
|||
|
Прошу прощения. Какойто глюк был с виндой после обновлений. Сейчас все работает. Перезагрузка помогла.
|