使 Windows 下的 Qt 应用程序获得 Administrator 权限

有些时候,我们需要在 Windows 平台以管理员权限运行某个应用程序。这样的应用程序会在右下角有一个小盾牌的图标:

需要管理员权限的应用程序

Windows 如何知道一个应用程序需要在运行时获取管理员权限?这是通过向应用程序的 exe 文件中注入一个 manifest 文件来告知的。知道了这个原理,我们就可以编译出需要管理员权限的 Qt 程序了。下面就是编译过程。

 

1. 创建一个普通的 Qt 工程。

Qt 演示程序

2. 在这个 Qt 工程中添加一个 XML 文件,命名为 menifest.xml。

添加 menifest.xml

menifest.xml 文件内容如下:

XML

13 lines

 

1

2

3

4

5

6

7

8

9

10

11

12

13

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

<assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="applicationname" type="win32"></assemblyIdentity>

<description>Description of application</description>

<!-- Identify the application security requirements. -->

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">

<security>

<requestedPrivileges>

<requestedExecutionLevel level="requireAdministrator" uiAccess="false"></requestedExecutionLevel>

</requestedPrivileges>

</security>

</trustInfo>

</assembly>

3. 在 .pro 文件中添加下面语句:

Plain Text

3 lines

 

1

2

3

win32 {

QMAKE_POST_LINK += mt -manifest $$PWD/manifest.xml -outputresource:$$OUT_PWD/debug/$$TARGET".exe" $$escape_expand(\n\t)

}

在这段语句中,win32块表示仅在 Windows 平台才会运行其中的语句。这保证了我们的项目能够跨平台编译。QMAKE_POST_LINK意味着会在链接结束之后执行后面的语句,也就是在链接完成后运行:

Plain Text

1 lines

 

1

mt -manifest $$PWD/manifest.xml -outputresource:$$OUT_PWD/debug/$$TARGET".exe" $$escape_expand(\n\t)

这是一条普通的 CMD 命令,因此需要注意的是,mt(即 mt.exe)必须在环境路径中(mt.exe 是 VS 开发环境提供的一个工具,一般安装过 VS 都会有这个工具)。同时还要注意,$$PWD/manifest.xml$$OUT_PWD/debug/$$TARGET".exe"都是正确的路径。为确保路径正确,可以在 .pro 文件中使用message()函数输出,例如:

Plain Text

1 lines

 

1

message($$OUT_PWD/debug/$$TARGET".exe")

准备完毕之后,重新运行 qmake 再重新构建工程,就可以得到我们想要的可执行程序了:

需要管理员权限的 Qt 程序

注意,如果生成失败,可重新尝试运行 qmake 再次构建。还需要注意三个路径的问题:mt.exe,$$PWD/manifest.xml 以及 $$OUT_PWD/debug/$$TARGET”.exe”。

 

from:https://www.devbean.net/2016/03/enable-qt-app-admin-on-win/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值