главная программы resource tuner руководство
Как указать в манифесте уровень привилегий для запуска приложения под Windows
Здесь рассматривается вопрос добавления секции Trust Info с разделом Security для поддержки управления учетными записями (UAC) в уже существующий манифест приложения. В случае, если приложение вообще не имеет манифеста в ресурсах, его следует добавить, используя Мастер манифестов.
Приложение без поддержки UAC в манифесте, которое не запускается явно с административными привилегиями, будет работать в режиме виртуализации совместимости. В этом режиме все глобальные операции записи, например в реестр или в разделы, не предназначенные для пользователя, перенаправляются в разделы, назначенные пользователю. Повышение пользователем уровня прав для такой программы невозможно. Система считает такую программу без манифеста UAC "старой" и создает в целях безопасности для такой программы выделенное пространство имен. Другие программы это пространство не видят.
Если вашему приложению требуется повысить уровень привелегий и отключить виртуализацию, необходимо добавить в манифест секцию Trust Info с разделом Security для поддержки управления учетными записями (UAC). Или удалить манифест, а затем сгенерировать и вставить новый манифест.
До этого я пытался использовать mt.exe [из MS Visual Studio] для вставки манифестов в мои файлы. На некоторых файлах срабатывало, на некоторых нет. Похоже, ваш метод парсинга .EXE файлов оказался более надёжен, чем тот, который используется в mt.exe. Brad Siegfried, |
Формат указания запрашиваемого уровня привилегий следующий:
<requestedExecutionLevel
level="asInvoker|highestAvailable|requireAdministrator"
uiAccess="true|false"/>
где
Level:
- As Invoker — Приложение выполняется с тем же маркером, что и его родительский процесс. Это параметр UAC по умолчанию, и его рекомендуется использовать для всех приложений Windows.
- Highest Available — Приложение выполняется с самыми высокими правами, доступными текущему пользователю.
- Require Administrator — Приложение выполняется с полным набором прав администратора. На локальном компьютере только членам группы администраторов разрешено запускать приложение с этим параметром. Вызов приложения с данным уровнем прав приводит к тому, что диалоговое окно UAC запрашивает возможность выполнения приложения с этим уровнем прав.
Если приложению требуются права администратора не постоянно, а только для выполнения какой-то разовой функции (например, для настройки межсетевого экрана), то основной процесс приложения следует выполнять с правами обычного пользователя, а функцию, требующую прав администратора, вынести в отдельный процесс.
uiAccess
- false — Приложению не требуется передавать ввод данных в другие окна.
- true — Приложению разрешается обойти защиту и передавать ввод данных в окно с более высокими привилегиями. Подобная настройка должна использоваться только для приложений со специальными возможностями, например, для экранной клавиатуры.
Для запуска приложения, требующего uiAccess=true, файл должен иметь действительную цифровую подпись с использованием code-signing сертификата от доверенного поставщика.
Добавление секции Trust Info с разделом Security
1. Скачайте и установите Resource Tuner, откройте ваш файл, раскройте папку Manifest в Дереве ресурсов и выберите ресурс.
Примечание: Если в файле нет манифеста, добавьте его, используя Мастер добавления манифеста.
2. Вы увидите XML скрипт манифеста. Выглядит он обычно так:
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
name="Microsoft.Windows.MyCoolApp"
processorArchitecture="x86"
version="5.1.0.0"
type="win32"/>
<description>Application description here</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="x86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
3. Важно убедится, что секция trustInfo в манифесте отсутствует.
4. Теперь вставим секцию trustInfo в манифест. Нажмите кнопку Resource Editor на панели инструментов (третья слева), чтобы отредактировать код манифеста.
5. Скопируйте и вставьте секцию TrustInfo в манифест:
<!-- level can be "asInvoker", "highestAvailable", or "requireAdministrator" -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
6. Выбирете в меню 'File' -> 'Save File As ...' для сохранения изменений в файл. Если появится предупреждение о том, что размер файла изменился, нажмите "Yes" для подтверждения. Для отмены всех изменений нажмите кнопку Cancel.
Изменения в файле вступят в силу только после того, как вы сохраните файл на диск.
Замена манифестов из командной строки при помощи Resource Tuner Console
Если вам требуется регулярно заменять или вставлять манифесты в десятках файлов, эту операцию целесообразно производить с помощью программы для пакетной замены манифестов - Resource Tuner Console.
Скачайте бесплатную ознакомительную версию!
Resource Tuner работает на всех версиях Windows
от XP до 11.
Минимальные системные требования:
Процессор Intel Pentium® или AMD K5 166 MHz
16 MB RAM