Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Использование manifest для запроса повышения прав (http://forum.oszone.net/showthread.php?t=292959)

RedScorpio 23-12-2014 16:56 2447319

Использование manifest для запроса повышения прав
 
Дано: Некое приложение для работы под 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 2447352

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

opel431 27-02-2015 04:34 2476466

Если бы разобрались, то возможно не спешили бы отвечать!
Цитата:

Цитата RedScorpio
<requestedExecutionLevel level="requireAdministrator" uiAccess="true"/> »

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

Цитата:

Цитата RedScorpio
Для того, чтобы можно было запускать такую программу из любого места нужно: »

Ответ классический - Т.е. - <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>

Andreyua 12-03-2023 03:57 3005149

А что сделать надо, чтобы при uiAccess="true" запускалось?


Время: 17:05.

Время: 17:05.
© OSzone.net 2001-