程序调用ShellExecuteEx打开其他程序(兼容UAC获取管理员权限)

转载:http://blog.csdn.net/xmnathan/article/details/39498431


程序调用ShellExecuteEx打开其他程序(兼容UAC获取管理员权限)

-----------------

  1. #include <stdio.h>  
  2. #include<windows.h>  
  3. #include<tchar.h>  
  4.   
  5. //检查系统版本是否是Vista或更高的版本  
  6. bool   IsOsVersionVistaOrGreater()  
  7. {  
  8.     OSVERSIONINFOEX    ovex;  
  9.     CHAR  szVersionInfo[1024];  
  10.     *szVersionInfo = '\x00';  
  11.     //设置参数的大小,调用并判断是否成功  
  12.     ovex.dwOSVersionInfoSIze = sizeof(OSVERSIONINFOEX);  
  13.     if( !GetVersionEx(  (LPOSVERSIONINFO) (&ovex)  )  )  
  14.     {  
  15.         printf("检查系统版本失败\n");  
  16.         return false;  
  17.     }  
  18.     //通过版本号,判断是否是vista及之后版本  
  19.     if(ovex.dwMajorVersion > 5)  
  20.     {  
  21.         return true;   
  22.     }  
  23.     else  
  24.     {  
  25.         return false;  
  26.     }  
  27. }  
  28. //检查并根据系统版本选择打开程序方式  
  29. void    ShellExecuteExOpen(CString appName, CString appPath)  
  30. {  
  31.     if(IsOsVersionVistaOrGreater())  
  32.     {  
  33.         SHELLEXECUTEINFO sei={sizeof(SHELLEXECUTEINFO)};  
  34.         sei.fMask  = SEE_MASK_NOCLOSEPROCESS;  
  35.         sei.lpVerb = TEXT("runas");  
  36.         sei.lpFile = appName;  
  37.         sei.lpDirectory = appPath;  
  38.         sei.lpnShow = SW_SHOWNORMAL;  
  39.         if(!ShellExecuteEx(&sei))  
  40.         {  
  41.             DWORD dwStatus=GetLastError();  
  42.             if(dwStatus==ERROR_CANCELLED)  
  43.             {  
  44.                 printf("提升权限被用户拒绝\n");  
  45.             }  
  46.             else if(dwStatus==ERROR_FILE_NOT_FOUND)  
  47.             {  
  48.                 printf("所要执行的文件没有找到\n");  
  49.             }  
  50.         }  
  51.     }  
  52.     else  
  53.     {  
  54.         appPath.Replace(L"\\",L"\\\\");  
  55.         ShellExecute(NULL, _T("open"), appName, NULL, appPath, SW_SHOWNORMAL);  
  56.     }  
  57.   
  58. }  


参考

VS2010与Win7共舞:UAC与数据重定向

c++获取操作系统的版本(vs2013)

利用ShellExecuteEx手动提升用户特权,以管理员权限来运行程序

MFC编程:Win7下支持弹出UAC对话框获取管理员权限



你可能感兴趣的:(程序调用ShellExecuteEx打开其他程序(兼容UAC获取管理员权限))