2012-05-29 4 views
4

Есть ли способ запустить приложение Qt в качестве администратора? У меня есть авто-updater для моего приложения. Для замены файлов в папке Program Files необходимы права администратора, поэтому для этого требуются права администратора.Запустите приложение Qt как администратор в Windows

+0

Вы написали приложение, которое нужно привилегии администратора для запуска? Нет ничего особенного в Qt для запуска приложения как администратора. – Bart

+0

@Bart Да, у меня есть приложение, для которого требуются права администратора. – ssk

+0

Вы можете щелкнуть правой кнопкой мыши приложение и настроить его для запуска в качестве администратора в разделе «Совместимость»> «Уровень привилегий». Или вы можете вставить манифест с соответствующим уровнем выполнения. Qt Creator - это ваша среда разработки? Или Visual Studio? – Bart

ответ

10

Запуск приложения с правами администратора не имеет особого отношения к Qt. Существует два подхода.

«Простой» - это вручную настроить приложение для запуска с правами администратора. Вы можете сделать это, щелкнув правой кнопкой мыши на исполняемом файле. Затем на вкладке «Совместимость» вы можете выбрать «Запустить это приложение в качестве администратора» в разделе «Уровень привилегий».

Однако, если вы автоматически хотите достичь того же, вам нужно будет внедрить манифест в ваше приложение. Вы хотите установить requestedExecutionLevel на номер requireAdministrator. Немного больше информации можно найти on MSDN или в this Wikipedia entry on UAC.

Для вашего приложения, построенного в Qt Creator, это означает, что вам нужно будет встроить манифест, включив ссылку на него в файл ресурсов (.rc). Этот файл ресурсов затем можно добавить в ваш .pro-файл, указав RC_FILE = myapp.rc. Информативное сообщение в блоге по этому самому вопросу is this one, а также this post на форуме QtCentre.

0

Из статьи, который ссылается г[email protected]:

Application Manifest

Во-первых, мы должны подготовить файл манифеста приложения. Это один ниже для приложения, которое не требует прав администратора:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <assemblyIdentity version="2.0.2.0" processorArchitecture="X86" type="win32"/> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 
    <security> 
     <requestedPrivileges> 
     <requestedExecutionLevel level="asInvoker" uiAccess="false"/> 
     </requestedPrivileges> 
    </security> 
    </trustInfo> 
</assembly> 

Во-вторых, нам нужно MT.exe инструмент от Microsoft Windows SDK для внедрения этого XML в нашем исполняемом файле. Для этого используйте следующую команду:

mt.exe –manifest MyApp.exe.manifest -outputresource:MyApp.exe;1 

Автоматическая манифеста встраивание

вручную, выполнив команду мт после каждой компиляции является трудоемкой задачей. Как насчет убеждения qmake сделать это для нас? После изучения документации она выглядит как следующая строка должна сделать трюк:

win32 { 
    WINSDK_DIR = C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A 
    WIN_PWD = $$replace(PWD, /, \\) 
    OUT_PWD_WIN = $$replace(OUT_PWD, /, \\) 
    QMAKE_POST_LINK = "$$WINSDK_DIR/bin/x64/mt.exe -manifest $$quote($$WIN_PWD\\$$basename(TARGET).manifest) -outputresource:$$quote($$OUT_PWD_WIN\\${DESTDIR_TARGET};1)" 
} 

Приведенный выше код будет автоматически выполнять mt.exe программу из WINSDK_DIR и вставлять файл манифеста, который находится в корневой директории проекта и именем после цели проекта (т. е. MyApp.manifest). Вот и все, чтобы добавить манифест, теперь давайте перейдем к нему и укажите информацию о версии.

Orginal сообщение:http://blog.strixcode.com/2010/08/embedding-application-manifest-and.html

Смежные вопросы