清泛IT社区

标题: c++ 代码提升权限,请求管理员身份运行权限 [打印本页]

作者: 清泛网    时间: 2016-04-08 17:12
标题: c++ 代码提升权限,请求管理员身份运行权限
普通的启动一个程序使用CreateProcess函数,有时会遇到权限不足失败的情况,那么如何提升执行权限呢?

使用 ShellExecuteEx 函数:
  1. // ------提升权限------
  2.         // Initialize the structure.
  3.         SHELLEXECUTEINFO sei = { sizeof(SHELLEXECUTEINFO) };
  4.         sei.fMask = SEE_MASK_NOCLOSEPROCESS;
  5.         // Ask for privileges elevation.
  6.         sei.lpVerb = TEXT("runas");

  7.         // Create a Command Prompt from which you will be able to start
  8.         // other elevated applications.
  9.         sei.lpFile = szFile;
  10.         sei.lpParameters = szCmdline;
  11.         sei.lpDirectory = szWorking;

  12.         // Don't forget this parameter; otherwise, the window will be hidden.
  13.         sei.nShow = SW_SHOWNORMAL;

  14.         if (!ShellExecuteEx(&sei)) {
  15.                 DWORD dwStatus = GetLastError();

  16.                 if (dwStatus == ERROR_CANCELLED) {
  17.                         // The user refused to allow privileges elevation.
  18.                         UpdateMessage(_T("用户拒绝安装,升级失败。"));
  19.                 }
  20.                 else if (dwStatus == ERROR_FILE_NOT_FOUND) {
  21.                         // The file defined by lpFile was not found and
  22.                         // an error message popped up.
  23.                         UpdateMessage(_T("升级包不存在,请检查!"));
  24.                 }

  25.                 CString strMsg;
  26.                 ::GetLastErrorString(strMsg);
  27.                 LOG_ERROR(_T("启动安装程序失败:%s"), strMsg);

  28.                 return -1;
  29.         }

  30.         m_hCreatePackage = sei.hProcess;                // 句柄
复制代码
m_hCreatePackage 存储已启动进程的句柄,有了它我们就可以使用 WaitForSingleObject 对其执行各阶段的逻辑进行处理了。




欢迎光临 清泛IT社区 (https://bbs.tsingfun.com/) Powered by Discuz! X3.3