程序调用ShellExecuteEx打开其他程序(兼容UAC获取管理员权限)
2014-09-23 15:21
489 查看
程序调用ShellExecuteEx打开其他程序(兼容UAC获取管理员权限)
-----------------
#include <stdio.h> #include<windows.h> #include<tchar.h> //检查系统版本是否是Vista或更高的版本 bool IsOsVersionVistaOrGreater() { OSVERSIONINFOEX ovex; CHAR szVersionInfo[1024]; *szVersionInfo = '\x00'; //设置参数的大小,调用并判断是否成功 ovex.dwOSVersionInfoSIze = sizeof(OSVERSIONINFOEX); if( !GetVersionEx( (LPOSVERSIONINFO) (&ovex) ) ) { printf("检查系统版本失败\n"); return false; } //通过版本号,判断是否是vista及之后版本 if(ovex.dwMajorVersion > 5) { return true; } else { return false; } } //检查并根据系统版本选择打开程序方式 void ShellExecuteExOpen(CString appName, CString appPath) { if(IsOsVersionVistaOrGreater()) { SHELLEXECUTEINFO sei={sizeof(SHELLEXECUTEINFO)}; sei.fMask = SEE_MASK_NOCLOSEPROCESS; sei.lpVerb = TEXT("runas"); sei.lpFile = appName; sei.lpDirectory = appPath; sei.lpnShow = SW_SHOWNORMAL; if(!ShellExecuteEx(&sei)) { DWORD dwStatus=GetLastError(); if(dwStatus==ERROR_CANCELLED) { printf("提升权限被用户拒绝\n"); } else if(dwStatus==ERROR_FILE_NOT_FOUND) { printf("所要执行的文件没有找到\n"); } } } else { appPath.Replace(L"\\",L"\\\\"); ShellExecute(NULL, _T("open"), appName, NULL, appPath, SW_SHOWNORMAL); } }
参考
VS2010与Win7共舞:UAC与数据重定向
c++获取操作系统的版本(vs2013)
利用ShellExecuteEx手动提升用户特权,以管理员权限来运行程序
MFC编程:Win7下支持弹出UAC对话框获取管理员权限
相关文章推荐
- 程序调用ShellExecuteEx打开其他程序(兼容UAC获取管理员权限)
- 程序调用ShellExecuteEx打开其他程序(兼容UAC获取管理员权限)
- golang windows程序获取管理员权限(UAC ) via gocn
- 利用ShellExecuteEx手动提升用户特权,以管理员权限来运行程序。win7会有UAC弹窗
- golang windows程序获取管理员权限(UAC )
- golang windows程序获取管理员权限(UAC )
- win7下,程序如何获取管理员权限
- VC程序自动获取windows7/vista系统管理员权限(vs2008)
- UAC技巧:使 Windows 内置程序默认以管理员权限运行
- iphone程序启动互相调用, 打开其他程序
- vs2008中向项目(以C#为例)添加要求管理员权限的属性(为了兼容vista的UAC)
- Perl: 获取新包、发邮件、调用其他程序 (转)
- android 如何调用(打开)其他程序
- windows7 uac初探三(最终编程篇-集成vc,vb和c#获取win7管理员权限)
- android 如何调用(打开)其他程序
- MFC编程:Win7下支持弹出UAC对话框获取管理员权限
- Perl: 获取新包、发邮件、调用其他程序
- VC程序在win7系统上运行,自动获取管理员权限
- vs2005 生成文件与win7兼容 \ 利用manifest提升程序为WIN7管理员权限
- VC程序在win7系统上运行,自动获取管理员权限