方法1:
pro添加
QMAKE_LFLAGS += /MANIFESTUAC:\"level=\'requireAdministrator\' uiAccess=\'false\'\"
管理員形式運(yùn)行qtcreator.exe.親測ok
========================================方法二未成功
QtCreator的話可在PRO里面添加
====================================VS2012下面===================================================================
如果你的程序跑在一個(gè)開啟了UAC保護(hù)的系統(tǒng)中,而你的程序又沒有"盾牌"的話,程序總是會(huì)受到各種阻撓的,比如讀寫文件,寫注冊表等。
有了"盾牌"的話就不會(huì)出現(xiàn)一些莫名其妙的問題了。
打開文件 "mkspecs\win32-msvc2012\qmake.conf"。注意,我這里用的是VC2012,所以文件夾是win32-msvc2012,根據(jù)自己的編譯器選擇對應(yīng)的目錄
找到
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\'\"
紅色的部分是添加的屬性。
這樣,以后生成的程序都自帶"盾牌"了,不用再去設(shè)置每個(gè).pro文件了。
=====================================方法四
起因:我用QT為某款游戲?qū)懥送鈷欤渲行枰靡涯嫦蛐薷牡?span style="border-bottom-color:rgb(250,137,27); border-bottom-width:1px; border-bottom-style:solid">文件替換掉游戲源文件。但是UAC設(shè)置會(huì)導(dǎo)致QFile很多功能無法正常使用。
解決:首先判斷UAC是否開啟,然后提供兩種解決方式
1.聯(lián)系客服:彈出客服的QQ,然后進(jìn)行遠(yuǎn)程協(xié)助。這種方式適合電腦小白。
2.提示處理:彈出UAC設(shè)置對話框,提示玩家操作。
void Widget::CloseUAC()
{
bool isuac = false;
HKEY hkey = NULL;
DWORD EnableLUA=0;
DWORD type = REG_DWORD;
DWORD size = sizeof(DWORD);
//讀取系統(tǒng)信息
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設(shè)置窗口
ShellExecute(NULL,L"open",L"C:\\windows\\system32\\useraccountcontrolsettings.exe",NULL, NULL,SW_SHOWNORMAL);
//彈出UAC錯(cuò)誤窗口
QMessageBox box;
box.setIcon(QMessageBox::Critical);
box.setWindowTitle("請求更改系統(tǒng)UAC設(shè)置");
box.setText("<FONT size=4>"
"<div><b>解決方式·一(推薦)</b></div>"
"<div>點(diǎn)擊此錯(cuò)誤框的“確認(rèn)”按鈕,將彈出客服QQ</div>"
"<div>添加為QQ好友,客服將遠(yuǎn)程協(xié)助完成操作</div>"
"<div><b>解決方式·二</b></div>"
"<div>目前已彈出名為“用戶帳戶控制設(shè)置”的窗口</div>"
"<div>請將此窗口左側(cè)的拉條拖到最下,并點(diǎn)擊確定</div>"
"<div>完成后會(huì)提示要求重啟電腦,并允許,即可解決</div>"
"<div>選擇 <b>確定</b> :結(jié)束程序,并 QQ 聯(lián)系客服</div>"
"<div>選擇 <b>取消</b> :結(jié)束程序</div>"
"</FONT>");
box.setStandardButtons(QMessageBox::Ok|QMessageBox::Cancel);
box.setDetailedText(
" UAC(User Account Control:用戶帳戶控制)是微軟為了提高系統(tǒng)安全性而在Vista中開始引入的新技術(shù)。\n"
" 它在開啟的情況下,經(jīng)常會(huì)彈出“您想允許XXX對此計(jì)算機(jī)進(jìn)行更改嗎?”的詢問窗口。\n"
" 此功能有效地遏制了病毒部分功能的實(shí)現(xiàn),但也殃及了游戲輔助軟件部分功能的實(shí)現(xià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);
}
聯(lián)系客服