在Win7運行VC程序往往受到UAC權(quán)限不夠的問題,以下有幾個方法獲得管理員權(quán)限
1、通過代碼提升用戶權(quán)限,代碼如下:
BOOL UpgradeProcessPrivilege(HANDLE hProcess, LPCTSTR lpPrivilegeName )
{
HANDLE hToken = NULL;
if(OpenProcessToken(hProcess, TOKEN_ALL_ACCESS, &hToken))
{
LUID Luid;
if(LookupPrivilegeValue(NULL, lpPrivilegeName, &Luid))
{
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
tp.Privileges[0].Luid = Luid;
return( AdjustTokenPrivileges(hToken, FALSE, &tp, 0, NULL, NULL) );
}
}
return FALSE;
}
// 使用
UpgradeProcessPrivilege(GetCurrentProcess(), SE_DEBUG_NAME);
- 參考鏈接:提升進程權(quán)限-OpenProcessToken等函數(shù)的用法
一句代碼提升進程權(quán)限
Windows核心編程_提權(quán)
【總結(jié)】用戶權(quán)限設(shè)置和進程權(quán)限提升
這段CODE我沒有試過,但百度配額中有哥們說,在桌面上時就沒有問題,但是拷到其他地方就不行了。
2、導(dǎo)入manifest文件
如果你使用的是VC6或以上版本IDE,通過導(dǎo)入manifest文件解決
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0"
processorArchitecture="X86"
name="IsUserAdmin"
type="win32"/>
<description>Description of your application</description>
<!-- Identify the application security requirements. -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
注:此文件只要擴展名是.manifest文件名可以任意。文件內(nèi)容的name屬性值也可以為任意。(VC6.0下經(jīng)過測試)
把此文件"import"到資源文件中,資源類型為24,資源ID為1,注:經(jīng)測試資源類型必須為24,資源ID也必須為1,
重新編輯即可,在windows7下該程序圖標(biāo)有一個盾狀小圖標(biāo),雙擊運行會出現(xiàn)對話框要求提升為管理員權(quán)限。
3、如果是vs2008或者2010,設(shè)為連接器清單文件的uac執(zhí)行級別
直接項目右鍵---屬性---連接器---清單文件---uac執(zhí)行級別 選擇requireAdministrator 重新編譯
這樣你的程序直接運行就擁有管理員權(quán)限了。程序就會出現(xiàn)一個盾牌。
因本人使用VS2010,用這個方法編譯過好幾個程序,暫無發(fā)現(xiàn)問題
4、修改注冊表:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\Program Files\win7test2.exe"="RUNASADMIN"
將上面的內(nèi)容保存為.reg文件,基中把C:\Program Files\win7test2.exe改為真實環(huán)境的應(yīng)用程序地址,雙擊運行即可。
這種方法后應(yīng)用程序圖標(biāo)不會有盾狀圖標(biāo),但雙擊運行仍然會彈出對話框要求提升權(quán)限。