每次运行程序的时候需要管理员权限,一般可以右键管理员模式运行,或者在属性里设置默认管理员权限运行。但是当需要移动执行文件的位置后,必须重新设置管理员权限。这种操作相对来说麻烦,有没有一种办法直接在exe中声明呢?
如果是在vs20**系列的微软支持软件包,则可以直接在项目属性中声明,这个项目需要管理员权限运行,那么之后编译后的程序可以直接使用管理员权限运行了。但是还有一部分人群讨厌体态臃肿的VS 20**软件,更加喜欢gcc这列纯编译环境,然后使用类似于记事本的编辑环境,这类人群想要编译后的程序直接拥有管理员权限,应该如何操作。
网络教程很多,代码或者说明比较长。咱们这里就直接列出代码和项目,更为方便。
测试环境VS code、mingw64、win11
结构:这是项目中需要有的原始文件,编译后可能多一些其他文件,也会列出
test 项目文件
|----main.cpp 主要执行程序
|----uac.manifest 微软的环境描述(xml格式)
|----uac.rc 微软的资源描述文件
接下来对每个文件的内容进行展示
main.cpp包含的内容:这里仅为提权,所以功能--无
// main.cpp
#include<iostream>
int main(int argc, char* argv[])
{
return 0;
}
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>
uac.rc包含的内容:这里的东西说明一下RT_MANIFEST这是一个宏,被winuser.h定义,感兴趣的可以跳转到winuser.h中查看。
#include <winuser.h>
1 RT_MANIFEST uac.manifest
编译命令:windres是mingw提供的一个工具,目的是编译微软的配套资料
windres --input-format=rc -O coff -i uac.rc -o uac.res
此时项目文件中多了一个uac.res文件
test 项目文件
|----main.cpp 主要执行程序
|----uac.manifest 微软的环境描述(xml格式)
|----uac.rc 微软的资源描述文件
|----uar.res 二进制文件,可以使用十六进制阅读器打开如图
这里的实质就是uac.manifest资源文件中的内容,是一种可以被链接到执行文件中的东西。
编译命令:常规的编译命令,然后项目文件中会多一个代有管理员标志的可执行文件。
g++ -o main main.cpp uac.res
至此,使用gcc编译win下可执行文件,并提升管理员权限的指导结束。
参考:但是更为精简,大段落的代码会让人不知从何处入手。
在MinGW或VS 2005 SP1环境下创建一个要求UAC权限的程序。 - bombless - 博客园 (cnblogs.com)