Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 15.05.2018, 09:35
xteam777 xteam777 вне форума
Прохожий
 
Регистрация: 14.03.2016
Сообщения: 33
Версия Delphi: RAD XE10
Репутация: 10
По умолчанию Обход UAC

Добрейшего уважаемые.

ОС Windows 10. UAC включен. Не получается из программы установить службу:

ShellExecute(Application.Handle, 'open', PChar(ParamStr(0)), PChar('/INSTALL'), '', SW_HIDE);
Error 5 - Отказано в доступе

Если правой кнопкой-Запустить под админом, то все нормально.

Как это обойти и сделать так, чтобы программа при запуске не требовала повышения прав, а при нажатии на кнопку Установить службу, требовала?
Ответить с цитированием
  #2  
Старый 15.05.2018, 09:50
nixon232 nixon232 вне форума
Активный
 
Регистрация: 26.01.2014
Сообщения: 280
Версия Delphi: delphi xe4
Репутация: выкл
По умолчанию

Нельзя сделать чтобы не требовало, можно поднять привелегии при помощи манифеста
Цитата:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
type="win32"
name="name.App"
version="1.0.0.1"
processorArchitecture="*"/>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
publicKeyToken="6595b64144ccf1df"
language="*"
processorArchitecture="*"/>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>

<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
<!-- Windows 8.1 -->
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<!-- Windows Vista -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
<!-- Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<!-- Windows 8 -->
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
</application>
</compatibility>
</assembly>
Или проверить права веред операцией
Код:
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  
Старый 15.05.2018, 13:14
Zorkov Igor Zorkov Igor вне форума
Новичок
 
Регистрация: 28.07.2009
Сообщения: 85
Репутация: 50
По умолчанию

Код:
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  
Старый 15.05.2018, 19:26
xteam777 xteam777 вне форума
Прохожий
 
Регистрация: 14.03.2016
Сообщения: 33
Версия Delphi: RAD XE10
Репутация: 10
По умолчанию

Цитата:
Сообщение от Zorkov Igor
Код:
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;


Вроде то, что нужно. А нужно эмулировать нажатие ПКМ-Запуск от имени администратора. Но при вызове Эксплорер выдает следующее:

Цитата:
Windows не удается получить доступ к указанному устройству, пути или файлу. Возможно, у вас нет нужных разрешений для доступа к этому объекту.

GetLastError() при этом выдает 0

Сам экзешник с параметром /INSTALL при ПКМ-Запуск от имени администратора отрабатывает без ошибок

Последний раз редактировалось xteam777, 15.05.2018 в 19:28.
Ответить с цитированием
  #5  
Старый 15.05.2018, 19:32
xteam777 xteam777 вне форума
Прохожий
 
Регистрация: 14.03.2016
Сообщения: 33
Версия Delphi: RAD XE10
Репутация: 10
По умолчанию

Добавил это. Проблема осталась.

Код:
ShellExecuteInfo.lpDirectory := PChar(ExtractFilePath(ParamStr(0)));

Последний раз редактировалось xteam777, 15.05.2018 в 19:54.
Ответить с цитированием
  #6  
Старый 16.05.2018, 07:19
Zorkov Igor Zorkov Igor вне форума
Новичок
 
Регистрация: 28.07.2009
Сообщения: 85
Репутация: 50
По умолчанию

Не совсем понятно конечно что за служба такая, тоже написана вами? это драйвер? что за служба? код службы есть?
Ответить с цитированием
  #7  
Старый 16.05.2018, 10:50
xteam777 xteam777 вне форума
Прохожий
 
Регистрация: 14.03.2016
Сообщения: 33
Версия Delphi: RAD XE10
Репутация: 10
По умолчанию

Прошу прощения. Какойто глюк был с виндой после обновлений. Сейчас все работает. Перезагрузка помогла.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:20.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter