QT中为程序加入超级管理员权限

Published on with 6 views and 0 comments

QT 的一些文件操作,注册表的操作等,有些操作会无效,主要是因为没有对C盘的相关权限。

解决方法:

1. mingw 编译器

在 pro 工程文件中加入

RC_FILE=main.rc

rc 文件,之前一篇博客中为程序增加图标也用到此文件,没错!可以为程序添加 icon
main.rc

IDI_ICON1               ICON     DISCARDABLE     "./res/logo.ico"
1 24 uac.manifest

第一行是为程序添加 icon 的;
第二行是增加权限,注意是 manifest,不是 mainfest。之前我看错了~
下面看看 uac.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> 

OK,这样就行了。看网上有些朋友说此方法行不通,可能是编译器不一样吧。在 VS 编译器上这样用会报错,VS 编译器请看第二种方法。

2.VS 编译器
在 QT 工程文件 pro 中加入 QMAKE_LFLAGS 的增加配置:

QMAKE_LFLAGS += /MANIFESTUAC:\"level=\'requireAdministrator\' uiAccess=\'false\'\"

3.CMAKE, 放在 add_executable 的后面

set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS
    "/MANIFESTUAC:\"level='requireAdministrator' uiAccess='false'\"
    /SUBSYSTEM:WINDOWS")

这样生成的应用程序图标上会多一个盾牌,运行时会有管理员权限,写入注册表,写文件,删文件不会再会失败了!

说你懂得生之微末,我便做了这壮大与你看,你说再热闹也终需离散,我便做了这一辈子与你看,你说冷暖自知,我便做了这冬花夏雪与你看,你说恋恋旧日好时光,我便做了这描金绣凤的浮世绘与你看。你说应愁高处不胜寒,我便拱手河山,讨你欢。