Russian Qt Forum

Qt => Кладовая готовых решений => Тема начата: kuzulis от Январь 25, 2016, 14:02



Название: Универсальное использование UAC для запуска приложения с нужными правами
Отправлено: kuzulis от Январь 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 и наоборот.. :)


Название: Re: Универсальное использование UAC для запуска приложения с нужными правами
Отправлено: Alex Custov от Январь 09, 2018, 13:50
Цитировать
13:48:52: Запускается: «C:\dev\Qt\Tools\QtCreator\bin\jom.exe»
...
uac.rc(3) : fatal error RC1020: unexpected '#endif'