》 阅读本文大约需要3分钟
您可能熟悉管理员权限。 有些软件在运行时会弹出安全提示,提示您是否以管理员权限运行。 单击“确定”即可正常运行。
随着系统的升级,在7以上的系统中,我们可能需要管理员权限才能读写一些特殊的位置,否则会导致读写失败,比如读写注册表,所以这种情况下我们需要获得管理员权限启动时的权利
要设置程序的管理员权限,只需设置应用程序清单配置即可。
场景描述
上周五我使用Qt的打包工具打包了一个客户端。 打包完成后,一切正常,只是写注册表失败。 结果发现失败的电脑都是以上版本,于是奇怪的问题就来了。 我当时大概就猜到了。 可能是权限问题
因此,右键单击安装包,让其以管理员权限运行。 安装完成,没有任何问题。那么问题就定位了。 10及以上等系统权限较高,所以我们需要给我们的安装包赋予管理员权限。
原理分析
系统如何知道exe正在以什么权限运行? 其实是通过配置文件来确认的。 配置文件的名称可以随意选择,比如uac这样的。
在编译我们自己的exe的过程中,我们可以将这个配置文件一起编译成最终的exe。
准备配置文件
uac 的内容。 配置文件大致如下
最重要的就是这句话

关于类型的信息请查看微软官方文档
[1]
以上四种配置类型可以根据自己的需求进行配置。
项目配置
Qt Pro 配置
win32 { # Use our own manifest file CONFIG -= embed_manifest_exe RC_FILE = main.rc }
main.rc文件内容
#define RT_MANIFEST 24 #define CREATEPROCESS_MANIFEST_RESOURCE_ID 1 CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "uac.manifest"
然后重新编译您的项目。 最终生成的exe的启动权限将是管理员权限。 您可以检查一下您的软件下方是否有盾牌图标。 如果是这样,恭喜设置成功。 如果没有,请自行检查上述重要设置。
总结
这次给打包的exe设置了管理员权限,这样我们的软件打包后生成的新exe也会有同样的权限。 由于我们的软件在安装过程中需要写入注册表,所以这正好解决了我们当前的问题
上述方法是通过修改QIFW源码实现的。 如果直接使用官方的exe包是达不到这个效果的。
参考
[1]
UAC类型:“/post/---of--.html#%E5%90%84%E7%A7%8D%E4%B8%8D%E5%90%8C%E7%9A%84-uac-% E6%B8%85%E5%8D%95%E9%80%89%E9%A1%B9",