
[Quick Qt: 2] Как запросить права администратора в приложении windows qt?
Иногда вам нужно, чтобы ваше приложение qt запрашивало у администратора в Windows правильную работу. Что ж, вы можете сделать это вручную, но это не всегда лучший вариант.
Если вашему приложению qt требуются права администратора, оно должно быть запрошено. Как я могу узнать, нужны ли вашему приложению права администратора или нет?
Короче говоря, есть способ дать приложению qt максимальную возможность запрашивать права администратора. Для этого вам понадобятся следующие файлы.
- Файл * .rc или файл сценария определения ресурса.
- Файл * .exe.manifest или манифест приложения.
Что это за файлы?
.rc
Ну, файл .rc, очевидно, является файлом ресурсов. Это определяется примерно так
Файл ресурсов - это текстовый файл с расширением .rc. В файле могут использоваться однобайтовые, двухбайтовые символы или символы Юникода. Синтаксис и семантика препроцессора RC аналогичны таковым из компилятора Microsoft C / C ++. Однако RC поддерживает подмножество директив препроцессора, определений и прагм в сценарии.
Вот определение .exe.manifest!
.exe.manifest
Манифест приложения - это файл XML (расширяемого языка разметки), который описывает и идентифицирует совместно используемые и частные параллельные сборки, к которым приложение должно привязаться во время выполнения. Это должны быть те же версии сборки, которые использовались для тестирования приложения. Манифесты приложений могут также описывать метаданные для файлов, которые являются частными для приложения.
Думаю, теперь у вас есть общее представление об этих файлах. Вы в основном не читаете этот пост для определения и подробного обзора, вы здесь, чтобы выполнить свою работу. Но всегда полезно иметь понимание, прежде чем работать над чем-то новым.
Давай приступим к работе!
Откройте Qt Creator, создайте новый проект Qt Widget. Я создал свой и назвал его «AdminPrivExample».
Прежде чем я активирую режим администратора моего приложения qt. Мне нужно предоставить моему приложению механизм проверки прав администратора, если я все делаю правильно. Здесь я поместил некоторый код в свое приложение, который может проверить, работает ли приложение в режиме администратора или нет.
Файл adminpriv.ui:
Предварительный просмотр файла пользовательского интерфейса:
Довольно просто, не правда ли?

Файл adminpriv.cpp:
Теперь все, что нам нужно сделать, это создать файл ресурсов и файл манифеста. Позвольте мне показать вам, куда класть файлы и что в них писать.
В QtCreator щелкните правой кнопкой мыши вид проекта, расположенный на левой панели, затем щелкните «Показать в проводнике».

После открытия проводника создайте два новых файла. Поскольку мой проект называется «AdminPrivExample», я собираюсь сделать его простым, назвав файл ресурсов «AdminPriv.rc» и файл манифеста «AdminPriv.exe.manifest» .

AdminPriv.exe.manifest
Вам необходимо поместить следующий код в файл манифеста, изменить описание и название приложения по своему усмотрению.
AdminPriv.rc
Что касается файла ресурсов, просто добавьте имя файла манифеста, а затем директиву. И да, "windows.h" должен быть включен.
Осталась одна мелочь
Мы создали манифест и файл ресурсов, но приложение qt не знает, что эти файлы существуют. Чтобы решить эту проблему, необходимо создать условную структуру, содержащую переменную RC_FILE.
AdminPrivExample.pro
Проверка приложения:
Чтобы проверить свое приложение, сохраните каждый созданный и измененный файл. Скомпилируйте и запустите проект. Если вы получите сообщение об ошибке, подобное этому снимку экрана, возможно, у вас есть приложение qt, запрашивающее собственный режим привилегий администратора. Аккуратно, а?

Это может означать две вещи: либо работает, либо нет. Чтобы узнать, перейдите в каталог сборки.
Из приведенного выше снимка экрана вы можете догадаться, что мой - «C: \ Users \ Manash \ Documents \ build-AdminPrivExample-Desktop_Qt_5_6_0_MinGW_32bit-Debug \ debug \».

Значок щита помещается в двоичный файл. Значит, это может сработать. Любопытный? Давайте разберемся!

Что будет, если я удалю эти строки из файла AdminPrivExample.pro?
win32 {
RC_FILE = AdminPriv.rc
}
Вот результат

Надеюсь, вам понравился пост. Ссылка на файлы проекта.