博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
为程序申请管理员权限
阅读量:5256 次
发布时间:2019-06-14

本文共 2081 字,大约阅读时间需要 6 分钟。

windows 为程序申请管理员权限

方法一:ShellExecuteEx, 头文件windows.h 依赖库Shell32.dll

此方法在程序中,为调用的外部程序申请管理员权限

QByteArray appNameByte = appName.toUtf8();    QByteArray dirByte = QDir::toNativeSeparators(appPath).toUtf8();    SHELLEXECUTEINFO sei={sizeof(SHELLEXECUTEINFO)};    sei.fMask  = SEE_MASK_NOCLOSEPROCESS;    sei.lpVerb = TEXT("runas");    sei.lpFile = appNameByte.data();    sei.lpDirectory = dirByte.data();    sei.nShow = SW_SHOW;    if(!ShellExecuteEx(&sei))    {        DWORD dwStatus=GetLastError();        if(dwStatus==ERROR_CANCELLED)        {            printf("refused\n");        }        else if(dwStatus==ERROR_FILE_NOT_FOUND)        {            printf("not found file\n");        }    }

示例:

QString appfile = "C:\\test.exe";QString args = "arg1 arg2 arg3";//"runas" 以管理员权限启动程序,hProcess小于32表示程序启动失败HANDLE hProcess = ShellExecute( 0, L"runas", startCopyApp.utf16(), args.utf16(), NULL, SW_SHOWNORMAL );

方法二:在vs”Project”->”Property”->”Linker”->”Manifest File”->”UAC Execution Level”

这种在工程设置中进行的配置,将为该生成的应用程序申请管理员权限

说明:

虽然test.exe已经通过方法二配置了需要管理员权限来启动,但是使用QProcess调用test.exe时,依然是没有以管理员权限启动,使用示例的方法可以解决此问题。一定要注意\要换成\\,而且要防止路径中有空格问题,appfilearg1等一定要用""包含起来

ShellExecute函数说明:

它的返回值是PROCESS_INFORMATION。
返回值可能有的错误如下: = 0 {内存不足}
ERROR_FILE_NOT_FOUND = 2; {文件名错误}
ERROR_PATH_NOT_FOUND = 3; {路径名错误}
ERROR_BAD_FORMAT = 11; {EXE 文件无效}
SE_ERR_SHARE = 26; {发生共享错误}
SE_ERR_ASSOCINCOMPLETE = 27; {文件名不完全或无效}
SE_ERR_DDETIMEOUT = 28; {超时}
SE_ERR_DDEFAIL = 29; {DDE 事务失败}
SE_ERR_DDEBUSY = 30; {正在处理其他 DDE 事务而不能完成该 DDE 事务}
SE_ERR_NOASSOC = 31; {没有相关联的应用程序}
//ShowCmd 参数可选值:SW_HIDE = 0; {隐藏}
SW_SHOWNORMAL = 1; {用最近的大小和位置显示, 激活}
SW_NORMAL = 1; {同 SW_SHOWNORMAL}
SW_SHOWMINIMIZED = 2; {最小化, 激活}
SW_SHOWMAXIMIZED = 3; {最大化, 激活}
SW_MAXIMIZE = 3; {同 SW_SHOWMAXIMIZED}
SW_SHOWNOACTIVATE = 4; {用最近的大小和位置显示, 不激活}
SW_SHOW = 5; {同 SW_SHOWNORMAL}
SW_MINIMIZE = 6; {最小化, 不激活}
SW_SHOWMINNOACTIVE = 7; {同 SW_MINIMIZE}
SW_SHOWNA = 8; {同 SW_SHOWNOACTIVATE}
SW_RESTORE = 9; {同 SW_SHOWNORMAL}
SW_SHOWDEFAULT = 10; {同 SW_SHOWNORMAL}
SW_MAX = 10; {同 SW_SHOWNORMAL}

转载于:https://www.cnblogs.com/jiushishuai/p/9452116.html

你可能感兴趣的文章
tju 1782. The jackpot
查看>>
湖南多校对抗赛(2015.03.28) H SG Value
查看>>
hdu1255扫描线计算覆盖两次面积
查看>>
hdu1565 用搜索代替枚举找可能状态或者轮廓线解(较优),参考poj2411
查看>>
bzoj3224 splay板子
查看>>
程序存储问题
查看>>
Mac版OBS设置详解
查看>>
优雅地书写回调——Promise
查看>>
android主流开源库
查看>>
AX 2009 Grid控件下多选行
查看>>
PHP的配置
查看>>
Struts框架----进度1
查看>>
Round B APAC Test 2017
查看>>
MySQL 字符编码问题详细解释
查看>>
Ubuntu下面安装eclipse for c++
查看>>
让IE浏览器支持CSS3圆角属性的方法
查看>>
巡风源码阅读与分析---nascan.py
查看>>
LiveBinding应用 dataBind 数据绑定
查看>>
Linux重定向: > 和 &> 区别
查看>>
nginx修改内核参数
查看>>