清泛IT社区

搜索
App Inventor 2 中文社区 轻松创建Apps

扫码访问移动社区 移动社区,您的掌上技术专家

关注我,精彩不错过! 关注我,精彩不错过!

扫码安装最新版AI伴侣 最新版AI伴侣v2.69

Aia Store .aia 源码一站式解决方案 发布日志AI2连接测试ai2Starter模拟器

开通VIP送小红花App Inventor 2 拓展有奖征文 VIP会员享专有教程,免费赠送基础版*技术支持服务! AI2入门必读中文文档中文教程IoT专题

查看: 416|回复: 0
打印 上一主题 下一主题

c++ 代码提升权限,请求管理员身份运行权限

  • TA的每日心情
    开心
    2024-02-17 18:16
  • 签到天数: 14 天

    [LV.3]偶尔看看II

    546

    主题

    715

    帖子

    1万

    积分

    管理员

    这里没有广告...

    Rank: 9Rank: 9Rank: 9

    积分
    10689
    QQ
    跳转到指定楼层
    楼主
    发表于 2016-04-08 17:12:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    普通的启动一个程序使用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技能提升
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    © 2024 tsingfun.com, Inc.  沪ICP备2020034476号-1  沪公网安备31011702000040号

    GMT+8, 2024-05-19 12:59 , Processed in 0.023385 second(s), 37 queries .