我正在制作不能成为Windows8和8.1的常规服务的OpenCL服务。所以我需要作为一个应用程序启动。
我的应用程序是否需要将另一个应用程序唤醒为管理员,取决于具体情况。但我无法在Windows 8/8.1上获得UAC级别
我试过这段代码:
BOOL IsUacEnabled() {
return checkSecurityKey(_T("EnableLUA"));
}
BOOL checkSecurityKey( TCHAR *lpchKey )
{
LPCTSTR pszSubKey = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System");
LPCTSTR pszValue = lpchKey;
DWORD dwType = 0;
DWORD dwValue = 0;
DWORD dwValueSize = sizeof( DWORD );
//KEY_QUERY_VALUE
if ( ERROR_SUCCESS != SHGetValue( HKEY_LOCAL_MACHINE, pszSubKey, lpchKey,
&dwType, &dwValue, &dwValueSize) )
{
return FALSE;
}
return dwValue != 0;
}
但是,尽管我将uac级别禁用为0,但从IsUacEnabled函数的返回值中,我始终获得TRUE。有人知道如何获得系统uac级别吗?
发布于 2014-05-13 21:52:41
这是一个链接器设置。
您需要在“链接器/清单文件”中将"UAC执行级别“设置为"requireAdministrator”。您可以在此处查看VisualStudio的硬拷贝:
Hardcopy: requireAdministrator settings in Visual Studio
然后在应用程序启动时,程序将以管理员权限运行。
发布于 2014-05-13 22:00:48
此代码获取调用应用程序的当前高程级别:
if (IsWindowsVistaOrGreater())
{ HANDLE hToken;
BOOL bOK = OpenProcessToken(GetCurrentProcess(), TOKEN_READ, &hToken);
DWORD infoLen;
bOK = GetTokenInformation(hToken,
TokenElevationType, // type of info to retrieve
&elevationType, // receives return value
sizeof(elevationType),
&infoLen); // receives returned length
}
https://stackoverflow.com/questions/23632755
复制相似问题