方法1:
pro添加
QMAKE_LFLAGS += /MANIFESTUAC:\"level=\'requireAdministrator\' uiAccess=\'false\'\"
管理员形式运行qtcreator.exe.亲测ok
========================================方法二未成功
QtCreator的话可在PRO里面添加
在 resource.rc里面就可以添加图标或者UAC权限之类了。如
这样就是申请uac权限。当然在pro文件同目录得有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"/>
-
</requestedPrivileges>
-
</security>
-
</trustInfo>
-
</assembly>
这样编译就可以了。另外rc文件还有其他很多功能,如图标的话,可以在resource.rc添加如下
-
IDI_ICON1 ICON DISCARDABLE "icon.ico"
有icon.ico就可以添加图标了。
====================================VS2012下面===================================================================
如果你的程序跑在一个开启了UAC保护的系统中,而你的程序又没有"盾牌"的话,程序总是会受到各种阻挠的,比如读写文件,写注册表等。
有了"盾牌"的话就不会出现一些莫名其妙的问题了。
打开文件 "mkspecs\win32-msvc2012\qmake.conf"。注意,我这里用的是VC2012,所以文件夹是win32-msvc2012,根据自己的编译器选择对应的目录
找到
QMAKE_LFLAGS_EXE = \"/MANIFESTDEPENDENCY:type=\'win32\' name=\'Microsoft.Windows.Common-Controls\' version=\'6.0.0.0\' publicKeyToken=\'6595b64144ccf1df\' language=\'*\' processorArchitecture=\'*\'\"
改为
QMAKE_LFLAGS_EXE = \"/MANIFESTDEPENDENCY:type=\'win32\' name=\'Microsoft.Windows.Common-Controls\' version=\'6.0.0.0\' publicKeyToken=\'6595b64144ccf1df\' language=\'*\' processorArchitecture=\'*\'\"\"/MANIFESTUAC:level=\'requireAdministrator\'
uiAccess=\'false\'\"
红色的部分是添加的属性。
这样,以后生成的程序都自带"盾牌"了,不用再去设置每个.pro文件了。
=====================================方法四
起因:我用QT为某款游戏写了外挂,其中需要用已逆向修改的文件替换掉游戏源文件。但是UAC设置会导致QFile很多功能无法正常使用。
解决:首先判断UAC是否开启,然后提供两种解决方式
1.联系客服:弹出客服的QQ,然后进行远程协助。这种方式适合电脑小白。
2.提示处理:弹出UAC设置对话框,提示玩家操作。
void Widget::CloseUAC()
{
bool isuac = false;
HKEY hkey = NULL;
DWORD EnableLUA=0;
DWORD type = REG_DWORD;
DWORD size = sizeof(DWORD);
//读取系统信息
OSVERSIONINFO osinfo={ sizeof(osinfo) };
if(GetVersionEx(&osinfo));
if(osinfo.dwMajorVersion>5)
if(RegOpenKeyEx(
HKEY_LOCAL_MACHINE,
L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\\",
0,KEY_READ,
&hkey)==ERROR_SUCCESS&&
RegQueryValueEx(hkey,L"EnableLUA",NULL,&type,(BYTE*)&EnableLUA,&size)==ERROR_SUCCESS
)isuac=(EnableLUA==1)?true:false;
RegCloseKey(hkey);
if(!isuac)return;
//弹出UAC设置窗口
ShellExecute(NULL,L"open",L"C:\\windows\\system32\\useraccountcontrolsettings.exe",NULL, NULL,SW_SHOWNORMAL);
//弹出UAC错误窗口
QMessageBox box;
box.setIcon(QMessageBox::Critical);
box.setWindowTitle("请求更改系统UAC设置");
box.setText("<FONT size=4>"
"<div><b>解决方式·一(推荐)</b></div>"
"<div>点击此错误框的“确认”按钮,将弹出客服QQ</div>"
"<div>添加为QQ好友,客服将远程协助完成操作</div>"
"<div><b>解决方式·二</b></div>"
"<div>目前已弹出名为“用户帐户控制设置”的窗口</div>"
"<div>请将此窗口左侧的拉条拖到最下,并点击确定</div>"
"<div>完成后会提示要求重启电脑,并允许,即可解决</div>"
"<div>选择 <b>确定</b> :结束程序,并 QQ 联系客服</div>"
"<div>选择 <b>取消</b> :结束程序</div>"
"</FONT>");
box.setStandardButtons(QMessageBox::Ok|QMessageBox::Cancel);
box.setDetailedText(
" UAC(User Account Control:用户帐户控制)是微软为了提高系统安全性而在Vista中开始引入的新技术。\n"
" 它在开启的情况下,经常会弹出“您想允许XXX对此计算机进行更改吗?”的询问窗口。\n"
" 此功能有效地遏制了病毒部分功能的实现,但也殃及了游戏辅助软件部分功能的实现。\n");
switch(box.exec())
{
case QMessageBox::Ok:QDesktopServices::openUrl(QUrl("http://wpa.qq.com/msgrd?V=1&Uin=123456789&Site=ioshenmue&Menu=yes"));break;
}
exit(0);
}
|