您的位置:首页 > 运维架构 > Shell

VC6下采用ShellExecuteEx提升管理员权限

2015-09-22 14:45 531 查看
bool   IsOsVersionVistaOrGreater()
{
OSVERSIONINFOEX    ovex;
CHAR  szVersionInfo[1024];
*szVersionInfo = '\x00';
//设置参数的大小,调用并判断是否成功
ovex.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
if( !GetVersionEx(  (LPOSVERSIONINFO) (&ovex)  )  )
{
return false;
}
//通过版本号,判断是否是vista及之后版本
if(ovex.dwMajorVersion > 5)
{
return true;
}
else
{
return false;
}
}
//检查并根据系统版本选择打开程序方式
void ShellExecuteExOpen(CString appName, CString appPath, CString strParameter)
{
if(IsOsVersionVistaOrGreater())
{
SHELLEXECUTEINFO sei={sizeof(SHELLEXECUTEINFO)};
sei.fMask  = SEE_MASK_NOCLOSEPROCESS;
sei.lpVerb = _T("runas");
sei.lpFile = appName;
sei.lpDirectory = appPath;
sei.lpParameters = strParameter;
sei.nShow = SW_SHOWNORMAL;
if(!ShellExecuteEx(&sei))
{
DWORD dwStatus=GetLastError();
if(dwStatus==ERROR_CANCELLED)
{
AfxMessageBox(_T("提升权限被用户拒绝"));
}
else if(dwStatus==ERROR_FILE_NOT_FOUND)
{
AfxMessageBox(_T("所要执行的文件没有找到"));
}
else
{
AfxMessageBox(_T("执行成功"));
}
}
}
else
{
appPath.Replace(L"\\",L"\\\\");
ShellExecute(NULL, _T("open"), appName, strParameter, appPath, SW_SHOWNORMAL);
}
}


参考

程序调用ShellExecuteEx打开其他程序(兼容UAC获取管理员权限)
VS2010与Win7共舞:UAC与数据重定向
c++获取操作系统的版本(vs2013)
利用ShellExecuteEx手动提升用户特权,以管理员权限来运行程序
MFC编程:Win7下支持弹出UAC对话框获取管理员权限
VC程序提升管理员权限

VS为VC++添加UAC控制(VC程序默认管理员运行)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: