Russian Qt Forum
Январь 18, 2018, 03:18 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Универсальное использование UAC для запуска приложения с нужными правами  (Прочитано 1227 раз)
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2598


Просмотр профиля
« : Январь 25, 2016, 14:02 »

Всем доброго времени.

В данном контексте речь идет о Windows && QMake.

Недавно понадобилось добавить возможность чтобы приложение при своем запуске
требовало права администратора. Как известно, для этой цели нужно использовать
специальные манифест-файлы или добавлять дополнительные опции в QMAKE_LFLAGS.

В гугле много решений на этот счет, но все они сумбурные и разнотипные (для
разных компиляторов VS или MINGW) решения могут бфть разные.

Так вот, чтобы не утруждать себя написанием всяких платформо-специфичных "дефайнов"
в *.pro файле и не городить огород делаем так:

= app-uac.pro =

Код:
QT += core
QT -= gui
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app

SOURCES += main.cpp

CONFIG -= embed_manifest_exe
RC_FILE = app-uac.rc

= app-uac.rc =

Код:
#ifndef RT_MANIFEST
#define RT_MANIFEST 24
#endif

#ifndef CREATEPROCESS_MANIFEST_RESOURCE_ID
#define CREATEPROCESS_MANIFEST_RESOURCE_ID 1
#endif

CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "app-uac.exe.manifest"

= app-uac.exe.manifest =

Код:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="requireAdministrator"
          uiAccess="false"/>
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>

= main.cpp =

Код:
#include <QCoreApplication>
#include <iostream>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    std::cout << "Hello";
    return a.exec();
}

Все это перекомпиливаем и.. вуаля.. можно не бояться переключать комплекты с MINGW на MSVC и наоборот.. Улыбающийся
« Последнее редактирование: Январь 25, 2016, 14:04 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2008


Просмотр профиля
« Ответ #1 : Январь 09, 2018, 13:50 »

Цитировать
13:48:52: Запускается: «C:\dev\Qt\Tools\QtCreator\bin\jom.exe»
...
uac.rc(3) : fatal error RC1020: unexpected '#endif'
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Страница сгенерирована за 0.173 секунд. Запросов: 22.