精华内容
下载资源
问答
  • Qt 程序添加管理员权限的几种方法

    千次阅读 2020-03-12 19:28:41
    一、项目配置 1. mingw编译器 在pro工程文件加入 RC_FILE=main.rc rc文件,之前一篇博客中为程序增加图标也用到此文件,没错!可以为程序添加icon ...IDI_ICON1 ICON ...第二行是增加权限,注意是man...

    一、项目中配置

    1. mingw编译器

    在pro工程文件中加入

    RC_FILE=main.rc

    rc文件中还可以为程序添加icon 

    main.rc

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

    第一行是为程序添加icon的,第二行是增加权限,注意是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>
    
    

    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"
    )

    二、使用添加管理员权限的小工具

    /// permission.bat
    
    start cmd /k " mt.exe -manifest "RunningPermission" -outputresource:"iphelper.exe";#1 &&taskkill /f /t /im cmd.exe"

     工具包下载连接:=》https://download.csdn.net/download/weixin_39568531/12244748

     

     

     

    展开全文
  • Qt管理员权限工具

    2016-07-05 16:13:41
    通过使用这个工具,可以为Qt程序增加盾牌标志,运行的时候申请管理员权限。这个功能常用于对系统关键位置进行文件操作、修改注册表等。
  • 而当我们对程序右键,以管理员权限运行时,又可以正常创建文件。 此时,说明我们的程序默认不具备管理员权限,故而无法对某些目录进行写入。 根据我们的编译器不同,有如下2种情况。 一、使用MSVC编译器 在pro文件...

    当我们写了一个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 _UNICODE
    	TCHAR** cmd = ::CommandLineToArgvW(::GetCommandLine(), &count);
    #else
    	TCHAR** cmd = ::__argv;
    	count = ::__argc;
    #endif
    
    	if (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;
    		}
    	}
    
        // ......
    }
    

    感兴趣,可以自己去看看。



    若对你有帮助,欢迎点赞、收藏、评论,你的支持就是我的最大动力!!!

    同时,阿超为大家准备了丰富的学习资料,欢迎关注公众号“超哥学编程”,即可领取。

    本文涉及工程代码,公众号回复:53UACCode,即可下载。

    在这里插入图片描述

    展开全文
  • 一、项目配置1. mingw编译器在pro工程文件加入RC_FILE=main.rcrc文件,之前一篇博客中为程序增加图标也用到此文件,没错!可以为程序添加iconmain.rcIDI_...第二行是增加权限,注意是manifest,不是mainfest。之...

    一、项目中配置

    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:

    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")

    二、使用添加管理员权限的小工具

    5916e195929cd6af60b5d06fb1f79df8.png

    /// permission.bat

    start cmd /k " mt.exe -manifest "RunningPermission" -outputresource:"iphelper.exe";#1 &&taskkill /f /t /im cmd.exe"

    工具包下载连接:=》

    标签:exe,Qt,manifest,编译器,VS,管理员,rc,权限

    来源: https://blog.csdn.net/weixin_39568531/article/details/104825816

    展开全文
  • QT程序默认管理员权限(UAC)运行

    千次阅读 2020-07-08 01:33:53
    首选声明一下“设置QT程序默认为管理员运行“”并不是我原创,我只是把我...接下来就开始跟大家一样有问题找百度,一搜“QT管理员权限”关键字,不出所料超级多的博客有解决方案,心想这问题解决的真是so easy,因...

    首选声明一下“设置QT程序默认为管理员运行“”并不是我原创,我只是把我解决问题时遇到的一下难题给大家分享一下,让后面的人少走弯路!
    我也是在遇到自己开发的程序安装到其他电脑上时很多创建文件写文件是会出现莫名其妙的不按套路出牌,仔细检查代码后发现代码逻辑实在是找不出明显的漏洞,再回头一想会不会管理员权限问题,后面每次运行程序都右键选择管理员权限运行果然一切正常了。接下来就开始跟大家一样有问题找百度,一搜“QT管理员权限”关键字,不出所料超级多的博客有解决方案,心想这问题解决的真是so easy,因为我的是msvc编译一看简单嘛,接着在PRO文件中添加一行指令 QMAKE_LFLAGS += /MANIFESTUAC:“level='requireAdministrator’uiAccess=‘false’”,复制->粘贴->清理所有项目->执行qmake->重新构建一气呵成,心想应该妥妥的了,然后在运行的时候就出问题了.百思不得其解明明网上各位博客大神都是这样描述的为啥在我这就不对了,各种清空删除重新在这里插入代码片编译都还是不对,翻阅n个博客后,终于在评论区一个大神的提示好像有那么点道理,一试果然ok!在此谢谢那位大神了!

    前面说了那么多废话,关键解决方法来了,QMAKE_LFLAGS += /MANIFESTUAC:\"level=\'requireAdministrator\' uiAccess=\'false\'\" 加上\转义字符完美解决问题。

    方案一:(仅适用于使用msvc编译器)
    在PRO文件中添加一行指令即可,

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

    方案二:(适用于mingw32编译器)
    我就不做描述了推荐一个链接:https://blog.csdn.net/u014746838/article/details/83180969
    以上就是让Qt程序以管理员权限运行的两种方法。

    展开全文
  • 方案一:(仅适用于使用msvc编译器)在PRO文件添加一行指令即可,QMAKE_LFLAGS += /MANIFESTUAC:"level='requireAdministrator'uiAccess='false'"方案二:(适用于mingw32编译器)先创建一个 .manifest 文件,如:app....
  • QMAKE_LFLAGS += /MANIFESTUAC:"level='requireAdministrator'uiAccess='...上面那句死活都不得行,提示路径或权限错误,删掉后面部分就可以了 QMAKE_LFLAGS += /MANIFESTUAC:"level='requireAdministrator'" ...
  • 可参考 使 Windows 下的 Qt 应用程序获得 Administrator 权限 MSVC编译器 pro加入: QMAKE_LFLAGS_WINDOWS += "/MANIFESTUAC:\"level='requireAdministrator' uiAccess='false'\"" 若修改后无错误也无效,修改...
  • Qt管理员权限工具.zip

    2021-12-28 19:17:17
    QT生成的EXE文件,自动申请管理员权限
  • QT VS2017 权限管理用户管理,单独输入界面, 界面设计,用户信息保存到sqlite数据库,查询输出等。
  • QT管理员权限补丁

    热门讨论 2014-06-03 03:28:35
    QT程序默认以管理员权限运行,方便修改注册表。
  • 例如 程序需要对系统文件进行删除,但因为没有管理员权限或用户未选择以管理员权限运行,删除文件操作执行失败 在Qt pro文件增加一下一条语句 QMAKE_LFLAGS += /MANIFESTUAC:\"level=\'requireAdministrator\'...
  • 如果qt写的程序,需要拥有管理员权限,又要实现拖拽功能,这种情况该如何处理? ::RevokeDragDrop(GetHWnd()); BOOL b1 = ChangeWindowMessageFilterEx(GetHWnd(), WM_DROPFILES, MSGFLT_ALLOW, NULL); BOOL...
  • 1、Qt Creator 方案一:(仅适用于使用msvc编译器) 在PRO文件添加一行指令即可, 1 QMAKE_LFLAGS += /MANIFESTUAC:"level='requireAdministrator'uiAccess='false'" MANIFESTUAC内容如下: <?xml ...
  • Qt Creator使程序自动以管理员权限运行问题背景解决方案msvc编译器MinGW编译器 问题背景 由于项目涉及到注册表操作,产物须避免客户右键->以管理员身份运行,双击即自动以管理员权限运行。 解决方案 msvc编译器...
  • qt应用程序拥有管理员权限

    千次阅读 2018-10-15 10:27:19
    通常我们要打包release应用程序,但是双击之后我们的qt应用程序是没有管理员权限,(除非你右键以管理员身份打开)。  所以如何让双击之后拥有管理员权限,方法如下:  1.首先我用的是vs2008+qt 4.8.6+add in ...
  • Qt管理员权限工具.rar

    2019-09-30 23:18:20
    运行此软件,选中工程pro文件,选中图标文件,然后重新编译程序,就是以管理员身份运行了
  • 亲测可用,在pro加入下面这句: QMAKE_LFLAGS += /MANIFESTUAC:\"level=\'requireAdministrator\' uiAccess=\'false\'\" qmake,在重新构建!不要只qmake不构建!!!一定要重新构建! ...
  • QT生成的exe启动时以管理员权限启动

    千次阅读 2019-08-29 09:32:58
    网上百度情况是在QT下有两种加管理员权限的方法,一种是QT中MSVC编译器的情况下加权限,另一种是在VS自带的 “开发人员命令提示” 加权限的方式,其实还有第三种方法:是在QT的Pro中附加其他命令,在编译期就直接...
  • QT中使用以管理员权限启动一个进程

    千次阅读 2018-02-02 11:09:23
    在windows,启动一个进程可以使用API ShellExecute来实现,详细参数可参考MSDN获悉。 #ifdef Q_OS_WIN #include #endif 具体实现可参考: #ifdef Q_OS_WIN/** 以下代码为宽字符,若改变字符集会导致编译不过,需...
  • qt程序设置超级管理员权限

    千次阅读 2018-11-27 15:25:20
    qt程序设置超级管理员权限   使 Windows 下的 Qt 应用程序获得 Administrator 权限   攻略 1、新建一个名字叫做menifest.xml 的文件,路径最好和.pro在同一个路径下,内容如下: &lt;?xml version=&...
  • 在开发过程,经常会遇到调用外部程序的需求,可往往外部程序需要管理员权限才可以运行,否则即使成功调用外部程序,执行命令也会失败。现在来分享一下我的解决思路: 1. QProcess (bu) ...
  • QT管理员权限启动子程序 #include int runAsAdmin(QString exe, QString arg) { #ifdef Q_OS_WIN // Initialize the structure. SHELLEXECUTEINFO sei = { sizeof(SHELLEXECUTEINFO) }; // Ask for privileges ...
  • 一些功能需要管理员权限,例如启动一个服务,这就需要exe在管理员权限下运行,一个方法是在exe上右键,选择“以管理员身份运行”,或者右键-属性-兼容性-勾选“以管理员身份运行此程序” 另一个方法是在程序搞定...
  • 在win10系统上将QT编译的软件安装在了系统盘,而恰巧该软件的某些操作是需要管理员权限的,若使用者未在运行该软件时选择‘以管理员身份运行’,上述操作都会以失败告终。 解决方案:给软件赋予管理员权限 1、在工程...
  • 执行以下指令(每次生成exe都要执行) v1.0.0\bin>mt.exe -manifest "getAdmin.manifest" -outputresource:"Video.exe" 4,成功后 会有盾牌 图标 5,打开exe 升级后 打开exe 执行,调用windows api, Qt QProcess...
  • 关于Qt开机自启动方法网络上有无数的博文总结过,这里我再贴上这段代码 //NativeFormat在windows下就是系统注册表 QSettings nsettings("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\...
  • 第一步,新建一个工程,这里就不提建立工程的事情了,再工程源码根目录新建文件: ...这个时候生成的应用程序就是带有管理员权限了,如果加的有.ico文件可以一起放入在同一个rc文件的,分行写就OK了
  • 前言 当用户具有本地管理员权限时,他们可以在自己的工作区做任何想做的事情。...很多本地管理员权限用户——尤其是高层——不喜欢无法完全控制设备所带来的枷锁,因此很多管理员让用户做自己设备的主人。 ...
  • 为了更新过程自然,因此不能使用管理员权限打开更新程序,否则会弹出对话框(是否以管理员权限打开应用),所以更新程序就是没有管理员权限的,但是主程序必须拥有管理员权限(启动时以管理员权限打开)才能直接...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,933
精华内容 1,973
关键字:

qt设置管理员权限