QT中为程序加入超级管理员权限
QT中为程序加入超级管理员权限
- Chapter1 QT中为程序加入超级管理员权限
- 1. mingw编译器
- 2. MSVC编译器
- 3. CMAKE
- Chapter2 如何给QT程序添加管理员权限(UAC)的几种方法
- 1、Qt Creator中
- 方案一:(仅适用于使用msvc编译器)
- 方案二:(适用于mingw32编译器)
- 2、vs中
- Chapter3 Qt 程序添加管理员权限的几种方法
- 二、使用添加管理员权限的小工具
- Chapter4 QT编译出来的exe以管理员权限启动
- 1、编译QT时遇到问题:
- 2、解决方法
- Chapter5 给Qt程序添加管理员权限总结(一定有你没见过的方式)
- 一、使用MSVC编译器
- 二、使用MinGW编译器
- 三、使用代码实现以管理员权限运行程序
- 四、对第三章内容的补充
Chapter1 QT中为程序加入超级管理员权限
原文链接:https://blog.csdn.net/u013441358/article/details/127452147
QT的一些文件操作,注册表的操作等,有些操作会无效,主要是因为没有对C盘的相关权限。通过为程序加入超级管理员权限可以解决此问题。
1. mingw编译器
在pro工程文件中加入:
RC_FILE=main.rc
main.rc是Qt项目的资源文件,其内容示例如下:
IDI_ICON1 ICON DISCARDABLE "./res/logo.ico"
1 24 uac.manifest
第一行是为程序添加图标,第二行是增加超级管理员权限。
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>
2. MSVC编译器
在QT工程文件中加入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")
已经获得windows管理员权限的应用程序图标上会出现一个盾牌,例如:
Chapter2 如何给QT程序添加管理员权限(UAC)的几种方法
原文链接:https://blog.csdn.net/A3872215/article/details/98039295
1、Qt Creator中
方案一:(仅适用于使用msvc编译器)
在PRO文件中添加一行指令即可,
QMAKE_LFLAGS += /MANIFESTUAC:\"level=\'requireAdministrator\' uiAccess=\'false\'\"
MANIFESTUAC内容如下:
<?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>
方案二:(适用于mingw32编译器)
先创建一个 .manifest 文件,如:app.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>
然后在exe所在的目录中执行mt指令(mt指令在VS自带的“开发人员命令提示”工具中)
1 mt.exe -manifest "app.manifest" -outputresource:"app.exe";#1
注意:exe和manifest文件要在同一目录中。
以上就是让Qt程序以管理员权限运行的两种方法。
2、vs中
方案一:在你的工程右键属性,找到linker–>manifest file.之后设置UAC execution level为:requireAdmistrator.
Chapter3 Qt 程序添加管理员权限的几种方法
原文链接:https://blog.csdn.net/weixin_39568531/article/details/104825816
二、使用添加管理员权限的小工具
/// permission.bat
start cmd /k " mt.exe -manifest "RunningPermission" -outputresource:"iphelper.exe";#1 &&taskkill /f /t /im cmd.exe"
Chapter4 QT编译出来的exe以管理员权限启动
原文链接:https://blog.csdn.net/weixin_44618297/article/details/125975286
1、编译QT时遇到问题:
2、解决方法
MinGW下加权限
这种方法需要先创建.manifest文件,如app.exe.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>
然后再创建一个.rc文件,如app.rc,这两个文件都需要放在Pro文件同级目录下,rc文件内容如下:
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "app.exe.manifest"
最后在Pro文件中再附加如下代码:
RC_FILE = app.rc
重新编译运行即可解决。
Chapter5 给Qt程序添加管理员权限总结(一定有你没见过的方式)
原文链接:https://blog.csdn.net/zyhse/article/details/108166181
当我们写了一个Qt程序,程序会在C盘某些目录下创建文件时,会发现代码没有问题,但是就是创建失败。而当我们对程序右键,以管理员权限运行时,又可以正常创建文件。
此时,说明我们的程序默认不具备管理员权限,故而无法对某些目录进行写入。
根据我们的编译器不同,有如下2种情况。
一、使用MSVC编译器
在pro文件中,添加如下一行:
QMAKE_LFLAGS += /MANIFESTUAC:\"level=\'requireAdministrator\' uiAccess=\'false\'\"
重新编译之后,程序会带个盾牌标志。
但是会有个后遗症,会发现我们在debug下,无法进行调试了,会弹出"The CDB process terminated"的错误:
这是因为我们的QtCreator没有以管理员权限运行,却对管理员权限的程序进行调试,所以报错,具体为什么,我也不知道。
当重新以管理员权限运行QtCreator,并进行调试,就不会报错了。
然鹅,每次启动QtCreator都以管理员权限太麻烦,换作不清楚的人,启动这个工程,一定是一脸懵逼。
所以我们稍微修改下pro文件,让程序仅仅在release模式下,才以管理员权限运行。
CONFIG(release, debug|release){
QMAKE_LFLAGS += /MANIFESTUAC:\"level=\'requireAdministrator\' uiAccess=\'false\'\"
}
这样,debug就不受影响了。
二、使用MinGW编译器
1、创建文件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>
2、创建资源文件res.rc
加入如下内容:
1 24 uac.manifest
3、修改pro文件
.pro文件加入如下内容:
RC_FILE += res.rc
如果有其他ico等资源文件可以一起加入到res.rc文件中。
重新编译之后,程序会带个盾牌标志。
也会有在第一章中提到的无法debug后遗症。
所以我们稍微修改下pro文件,让程序仅仅在release模式下,才以管理员权限运行。
CONFIG(release, debug|release){
RC_FILE += res.rc
}
这样,debug就不受影响了。
三、使用代码实现以管理员权限运行程序
以上2种方式,比较常见。而且编译完之后,exe会带盾牌标志。
下面介绍一种,编译完不带盾牌,但是依然以管理员权限运行程序的方式。
我们首先创建UAC.h,如下:
#ifndef UAC_H
#define UAC_H#include <ShlObj_core.h>
#include <QCoreApplication>// for IsUserAnAdmin()
#pragma comment (lib, "Shell32.lib")class UAC
{
public:// 以管理员权限启动一个新实例// true-启动了新实例// false-未启动新实例static bool runAsAdmin(){if (IsUserAnAdmin()){return false; // 当前程序正以管理员权限运行}QStringList args = QCoreApplication::arguments(); // 获取命令行参数if (args.count() < 2 || args[1] != "runas") // 不带参数或参数不为"runas"时,即直接运行{// 获取应用程序可执行文件的路径QString filePath = QCoreApplication::applicationFilePath();// 以管理员权限,执行exe程序HINSTANCE ins = ShellExecuteA(nullptr, "runas", filePath.toStdString().c_str(),"runas", nullptr, SW_SHOWNORMAL);if (ins > (HINSTANCE)32){return true; // 程序新实例启动成功}}return false;}
};#endif // UAC_H
UAC类中只有一个方法runAsAdmin(),实现以管理员权限启动一个新实例程序。
当执行到ShellExecuteA()函数时,会请求以管理员权限启动一个新实例程序,如下:
点击“是”,则表示允许启动,此时ShellExecuteA()返回值大于32;
点击“否”,则表示禁止启动,此时ShellExecuteA()返回值小于32。
我们在main.cpp中调用UAC类,如下:
#include <QCoreApplication>
#include "UAC.h"int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 以管理员权限启动一个新实例if (UAC::runAsAdmin()){return 0; // 启动成功,当前程序退出} // 未启动,当前程序继续return a.exec();
}
我们双击执行生成的exe时,首先就会请求以管理员运行一个新实例;
若允许了,那么当前程序就退出;
若不允许,则当前程序继续执行。
这样,实现了启动时选择权限,而后保留只有一个对应权限程序运行的效果,与上述2种方式,双击运行效果一致。
不同点: 由于使用启动一个外部进程的方式来实现,故生成的exe不会带盾牌标志。
后遗症: 也有一个问题,就是进行debug时,允许管理员权限运行,那么启动了新实例,而当前程序退出,所以是无法进行调试的。
只能选择禁止管理员权限运行,才能对当前程序进行调试。
小贴士:
我们发现很多大厂出品的软件,也具有管理员权限,但是人家exe是不带盾牌标志的。或许用户看到盾牌,会觉得这货不是个善类。。。所以还是尽量伪装一下,我们就是普通软件,真的人畜无害!!! (>‿◠)
这种方式就看大家的需要吧。
四、对第三章内容的补充
使用代码实现以管理员权限运行程序,思路是源自磁盘测试开源软件CrystalDiskMark,其github地址:https://github.com/hiyohiyo/CrystalDiskMark
在DiskMark.cpp文件中,存在如下原版代码,我的代码在此基础上,进行了一点修改,方便调用。
BOOL RunAsRestart()
{int count;
#ifdef _UNICODETCHAR** cmd = ::CommandLineToArgvW(::GetCommandLine(), &count);
#elseTCHAR** cmd = ::__argv;count = ::__argc;
#endifif (count < 2 || _tcscmp(cmd[1], _T("runas")) != 0){TCHAR path[MAX_PATH];::GetModuleFileName(NULL, path, MAX_PATH);if (::ShellExecute(NULL, _T("runas"), path, _T("runas"), NULL, SW_SHOWNORMAL)> (HINSTANCE)32){return TRUE;}}return FALSE;
}BOOL CDiskMarkApp::InitInstance()
{// ......if (! IsUserAnAdmin()){if (RunAsRestart()){return FALSE;}}// ......
}
感兴趣,可以自己去看看。
相关文章:
QT中为程序加入超级管理员权限
QT中为程序加入超级管理员权限 Chapter1 QT中为程序加入超级管理员权限1. mingw编译器2. MSVC编译器3. CMAKE Chapter2 如何给QT程序添加管理员权限(UAC)的几种方法1、Qt Creator中方案一:(仅适用于使用msvc编译器)方案二:&#x…...
共识算法之争(PBFT,Raft,PoW,PoS,DPoS)
文章目录 共识算法拜占庭容错技术(Byzantine Fault Tolerance,BFT)PBFT:Practical Byzantine Fault Tolerance,实用拜占庭容错算法Raft协议POW(Proof of Work)工作量证明机制POSDPoS(Delegated Proof of St…...
抽象的java入门1.3.0
前言: 在1.2.0版本中我们介绍了public class hello {}并从中提取出两个新概 修饰符和作用域 public class hello {public static void main(String[] args) {System.out.println("Hello World");} } 正片: 这一期把剩余的内容刨析出来 pub…...
【Oracle生产运维】表空间可用性告警排查处理
1 前言 在生产环境中,一般设置表空间告警阈值是90%,在接到监控报警后,并不是需要立刻对表空间进行扩容。 决定是否扩容主要看表空间最近的增量是多少,假如剩余10%的空间还能支持1个月的增量,那就不需要急着扩容。如果…...
mac Network: use --host to expose
本地启动无法访问,这个不是权限问题是mac 主机端口安全策略,现在我们只需要开启端口自动检测就可以 npm run dev --host 网络:未暴露 方案一 1、执行 npm run dev -- --host 方案二 1、请在 vite.config.js server: {host: true } 1…...
ChatGPT-4o体验demo
OpenAI 最近推出了其最新的人工智能语言模型——GPT-4O。该模型是在原有 GPT-4 的基础上进行优化而成,旨在提升生成质量和响应速度。GPT-4O 采用了更加高效的架构设计,使其在处理复杂文本时表现出更快的速度和更高的准确性。GPT-4O 在训练过程中融入了最…...
FPGA SPI采集ADC7606数据
一,SPI总线的构成及信号类型 SPI总线只需四条线(如图1所示)就可以完成MCU与各种外围器件的通讯: 1)MOSI – Master数据输出,Slave数据输入 2)MISO – Master数据输入,Slave数据输出 3)SCK – 时钟信号,由Master产生 4)/CS – Slave使能信号,由Master控制。 在一个SPI时…...
html three.js 引入.stl模型示例
1.新建一个模块用于放置模型 <div id"chart_map" style"width:800px;height:500px"></div> 2. 引入代码根据需求更改 <!-- 在head或body标签内加入以下链接 --> <script src"https://cdn.jsdelivr.net/npm/three0.137/build/t…...
从零手写实现 nginx-11-文件处理逻辑与 range 范围查询合并
前言 大家好,我是老马。很高兴遇到你。 我们为 java 开发者实现了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何处理的,可以参考我的另一个项目: 手写从零实现简易版 tomcat minicat 手写 nginx 系列 …...
Java算法-力扣leetcode-167. 两数之和 II - 输入有序数组
给你一个下标从 1 开始的整数数组 numbers ,该数组已按 ****非递减顺序排列 ** ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 < index1 < index2 < n…...
实战 | YOLOv10 自定义数据集训练实现车牌检测 (数据集+训练+预测 保姆级教程)
导读 本文主要介绍如何使用YOLOv10在自定义数据集训练实现车牌检测 (数据集训练预测 保姆级教程)。 YOLOv10简介 YOLOv10是清华大学研究人员在Ultralytics Python包的基础上,引入了一种新的实时目标检测方法,解决了YOLO以前版本在后处理和模型架构方面…...
自定义类型:结构体+结构体内存对齐+结构体实现位段
结构体内存对齐实现位段 一.结构体1.结构体的声明2.结构体变量成员访问操作符3.结构体传参4.匿名结构体5.结构的自引用 二.结构体内存对齐1.对齐规则2.为什么存在内存对齐?3.修改默认对齐数 三.结构体实现位段1.什么是位段2.位段的内存分配3.位段的跨平台问题4.位段…...
0109__strip(1) command
strip(1) command_linux strip-CSDN博客...
英码科技推出鸿蒙边缘计算盒子:提升国产化水平,增强AI应用效能,保障数据安全
当前,随着国产化替代趋势的加强,鸿蒙系统Harmony OS也日趋成熟和完善,各行各业都在积极拥抱鸿蒙;那么,边缘计算要加快实现全面国产化,基于鸿蒙系统开发AI应用势在必行。 关于鸿蒙系统及其优势 鸿蒙系统是华…...
从军事角度理解“战略与战术”
战略与战术,均源于军事术语。 战略(Strategy),源自希腊语词汇“strategos(将军)”和“strategia(军事指挥部,即将军的办公室和技能)”。指的是指挥全局性作战规划的谋略…...
最短路径——迪杰斯特拉与弗洛伊德算法
一.迪杰斯特拉算法 首先对于最短路径来说:从vi-vj的最短路径,不用非要经过所有的顶点,只需要找到路径最短的路径即可; 那么迪杰斯特拉的算法:其实也就与最小生成树的思想类似,找到较小的,然后…...
6.7.11 一种新的迁移学习方法可提高乳房 X 线摄影筛查中乳腺癌的诊断率
分割是一种将图像分割成离散区域的技术,以便将感兴趣的对象与周围环境分开。为了制定治疗计划,分割可以帮助医生测量乳房中的组织量。 二元分类问题的目的是将输入数据分为两组互斥的数据。在这种情况下,训练数据根据要解决的问题以二进制格…...
【Proteus8.16】Proteus8.16.SP3.exe的安装包,安装方法
下载: 链接:https://pan.baidu.com/s/14ZlETF7g4Owh8djLaHwBOw?pwd2bo3 提取码:2bo3 管理员打开proteus8.16.SP3.exe一路装就行了,许可证选Licence2.lxk,点安装后关闭,然后继续装完。 然后打开Patch-Proteus-8.16-…...
17、matlab实现均值滤波、中值滤波、Butterworth滤波和线性相位FIR滤波
1、创建信号 1)创建正余弦信号、噪声信号和混合信号 原始正余弦信号公式:Signal1 sin(2*pi*20* t) sin(2*pi*40* t) sin(2*pi*60* t) 高斯分布的白噪声:NoiseGauss [randn(1,2000)] 均匀分布的白噪声:[rand(1,2000)] 正余弦…...
【Autopilot】没有自动添加本地管理员的问题处理
【问题】某公司选用了D记的笔记本电脑,约定出厂就预配置好Autopilot,当时向D记提供了三个信息: 1. M365的租户ID 2. 公司域名信息 3. Group Tag (某公司为跨国公司,通过Group Tag来区分国家,比如CHN-中国,L…...
【C#学习笔记】属性和字段
文章目录 前言属性和字段的区别字段访问修饰符和关键字定义变量类型的定义变量命名变量的赋值 属性 不同的使用情况 前言 最近在工作的过程中常常会觉得自己在程序设计方面的能力还是有欠缺。例如一直对于变量的声明感到不足,在工作中为了图方便总是直接public定义…...
最佳实践的实践 - API 不应将 HTTP 重定向到 HTTPS
原文:jviide - 2024.05.23 TL;DR: 与其将 API 调用从 HTTP 重定向到 HTTPS,不如让失败显而易见。要么完全禁用 HTTP 接口,要么返回明确的 HTTP 错误响应,并撤销通过未加密连接发送的 API 密钥。遗憾的是,许多知名的 A…...
四种跨域解决方案
文章目录 1.引出跨域1.基本介绍2.具体演示1.启动之前学习过的springboot-furn项目2.浏览器直接访问 [localhost:8081/furns](http://localhost:8081/furns) 可以显示信息3.启动前端项目,取消请求拦截器,这样设置,就会出现跨域4.跨域原因 2.跨…...
移动端投屏到大屏幕的操作详解
如果你懒得折腾电脑、电视或其他大屏设备上的影视软件安装及配置,可以选择直接在手机端上将影片投屏到电脑、电视或其他大屏设备上,这里给大家分享三种手机投屏的方法。 系统自带的投屏功能 不管是安卓、鸿蒙还是苹果操作系统,都自带了无线…...
【环境搭建】3.阿里云ECS服务器 安装Redis
在阿里云的 Alibaba Cloud Linux 3.2104 LTS 64位系统上安装 Redis 可以通过以下步骤完成: 1.更新系统软件包: 首先,更新系统软件包以确保所有软件包都是最新的: sudo yum update -y2.安装编译工具和依赖项: Redis…...
动态语言的开源编译器汇总
对于动态语言而言,我们通常不会使用传统意义上的“编译器”,因为动态语言往往是在运行时解释执行的,或者被转换为中间形式(如字节码),再由虚拟机执行。不过,为了性能考虑,现代动态语…...
Linux防火墙配置001
Linux防火墙主要用于控制网络流量,保护系统安全。在Linux中,有几种不同的防火墙管理工具,其中最常见的是iptables和firewalld。本章主要讲述如何关闭防火墙。 操作系统: CentOS Stream 9 操作步骤: 关闭防火墙&…...
Tomcat概述及部署
目录 一.Tomcat概述 1.介绍 2.使用场景 3.组件构成 4.组件结构 5.请求过程 二.Tomcat部署 1.关闭防火墙 2.下载安装JDK 3.安装启动tomcat 4.部署虚拟主机 4.1.创建 xy101 和 xy102 项目目录和文件 4.2.修改 Tomcat 主配置文件 server.xml 一.Tomcat概述 1.介绍 …...
[Vue3:Vite构建项目]:安装router实现登录页面路由跳转
文章目录 一:前置依赖查看依赖安装vite npm create vitelatest sys-instruction-0607 --template vue-ts安装路由:npm install vue-router4安装elementUI:npm install element-plus --save 二:配置文件:viewsÿ…...
概率论与数理统计,重要知识点——全部公式总结
二、一维随机变量及其分布 五个分布参考另外一篇文章 四、随机变量的数字特征 大数定理以及中心极限定理 六、数理统计...
wordpress网站描述插件/广州网络广告推广公司
图像滤波前言1.制作噪声生成椒盐噪声生成高斯噪声2.滤波均值滤波框滤波高斯滤波中值滤波总结前言 很多时候我们能拿到的图片并不是十分干净,有时会有一些噪声,这时我们就应该采用滤波的方式对他进行处理,本文将在一张干净的图片上生成噪声并…...
公司网站可以做无形资产么/专业seo网站
Attribute简介Unity使用cs作为开发语言,而cs有一项非常重要的特性就是attribute。attribute可以将元数据或声明性信息与代码(程序集,类型,方法,属性等)相关联。将attribute与程序实体相关联后,可以使用反射技术在运行时…...
网站建设资质/惠州seo收费
2019独角兽企业重金招聘Python工程师标准>>> 1.官方推荐使用1.6 JDK,使用1.7JDK签名,dos下的指令是不一样的,我尝试过用1.8 JDK签名,一直都不行。(........................无语ing) 2.Robotium…...
网站开发视频是存储的/搭建网站基本步骤
对如何写一个工业级的Python项目作一个top-down小结。一、项目结构顶层结构:文件夹:model可以是项目中的自定义类;utils是一些工程工具,比如log,trackerlog存放记录的日志py文件:run:主文件&…...
网站建设 案例展示/关键词优化技巧
果粉之家,专业苹果手机技术研究十年!您身边的苹果专家~在今年WWDC21开发者大会上,苹果在介绍iOS 15系统重大变化时,还曾提到一个不太引人注目的小变化。那就是在iOS 15上,用户可以直接在App内申请内购退款,…...
wordpress语言翻译/怎样在百度上发帖子
最近接手一个服务器,不过是Windows系统的,运行程序时候总是出一些问题。有点怀疑是系统的问题?于是决定从windows迁移到Linux系统里面去。不过遇到了一个大坑!!!!安装过程非常简单,就…...