rubezh-TWnlenfritplesuk

QT vs UAC: Установка признака "requireAdministrator" при сборке проекта

Недавно при работе над одним из проектов на Qt и C++ мне понадобилось, чтоб моя программа при запуске запрашивала привилегии администратора. 

Думаю все знакомы с таким механизмом защиты ОС Windows, как UAC (User Account Control, Контроль Учетных Записей). Сей механизм защищает систему от несанкционированного изменения системных настроек, блокируя доступ к оным всем программам, которые запущены от имени простого смертного юзера. Однако как показывает практика ~95% пользователей Windows работают из-под аккаунта с правами Администратора, из них, пожалуй, добрая половина отключают этот самый механизм, чтоб при запуске кряков и инсталлеров не всплывало назойливое окошко UAC. После этого еще и говорят, что дескать "Винда - дырявая", сами того не подозревая что они же и открывают дверь вирусам и прочим шпионским программам. Но это все отступление...

Запросить повышенные права при запуске приложения можно несколькими способами, вот пара наиболее очевидных:

  • В свойствах исполнимого файла поставить флажок "Выполнять этут программу от имени администратора";
  • Внедрить в манифест флаг "requireAdministrator".

Второй наиболее верный, поэтому стал искать как это реализуется. В Visual Studio это делается довольно просто, а в среде QtCreator подобного параметра просто нет. Позже на одном из форумов нашел решение - установка дополнительных аргументов в командной строке qmake. Метод рабочий - поэтому оставил запись себе на память, может кому-то еще понадобится. Но метод работает только вместе с компилятором MSVC! Любителям MinGW можно реализовать эту операцию с помощью дополнительных утилит, но об этом в другой статье.

В среде QtCreator можно настроить параметры сборки, чтоб qmake при сборке добавлял флаг "requireAdministrator" в манифест приложения. Для этого необходимо открыть вкладку "Проекты", затем "Сборка и запуск" и в нужном профиле откорректировать "Этапы сборки", добавив в "Дополнительные параметры" следующую строчку:

"CONFIG += embed_manifest_exe" "QMAKE_LFLAGS += /MANIFESTUAC:level=\'requireAdministrator\'"

qmake

Но для успешного запуска приложения из среды разработки подтребуется так же запуск среды с повышенными правами. В противном случае по CTRL+R будем получать ошибку "Не удалось запустить программу. Путь или права недопустимы?".

1 1 1 1 1 1 1 1 1 1 Рейтинг 100%

Метки: Кодинг, CPP, Qt

Печать E-mail

Добавить комментарий


Защитный код
Обновить