PDA

Показать полную графическую версию : [решено] Использование manifest для запроса повышения прав


RedScorpio
23-12-2014, 16:56
Дано: Некое приложение для работы под Windows Vista/7/8 должно запросить права администратора. Делаю файл манифеста:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="MyApp" type="win32"/>
<description>Description of MyApp</description>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="true"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
В результате независимо от значения uiAccess для level="requireAdministrator" при запуске приложения возникает ошибка "Сервер возвратил ссылку", запроса прав нет, приложение не запускается.
Если закомменитовать параметр requestedExecutionLevel, приложение запускается.

Вопрос классический: Кто виноват и что делать?

RedScorpio
23-12-2014, 18:11
Сам спросил, сам отвечаю:
Повышение прав программе по запросу из манифеста в общем случае будет работать только в случае, если она запущена из "безопасного места" (т.е. хотя бы %SystemRoot% или %ProgramFiles%).
Для того, чтобы можно было запускать такую программу из любого места нужно:
1. Win+R -> secpol.msc
- Локальные политики -> Параметры безопасности
2. Отключить:
- Контроль учетных записей: повышать права UIAccess-приложений только при установке в безопасных местах
ну и проверить и отключить, если включено
- Контроль учетных записей: повышение прав только для подписанных и проверенных исполняемых файлов
3. Перезагрузка.

opel431
27-02-2015, 04:34
Если бы разобрались, то возможно не спешили бы отвечать!
<requestedExecutionLevel level="requireAdministrator" uiAccess="true"/> »

Атрибут uiAccess отвечает за управлением окном ввода в процессах с повышенными правами для реализации специальных возможностей. Кроме того, требуется, чтобы программа была подписана (...а у нас есть цифровая подпись - сертификат?) и запускалась из папок \Program Files\ и \windows\system32\. Чаще всего, в этом нет необходимости.
Смотрите документацию - https://msdn.microsoft.com/en-us/library/windows/desktop/ee671610(v=vs.85).aspx

Для того, чтобы можно было запускать такую программу из любого места нужно: »
Ответ классический - Т.е. - <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>

Andreyua
12-03-2023, 03:57
А что сделать надо, чтобы при uiAccess="true" запускалось?




© OSzone.net 2001-2012