【问题标题】:Is it possible to run as administrator only through code是否可以仅通过代码以管理员身份运行
【发布时间】:2011-08-10 06:47:29
【问题描述】:

操作系统:Windows 语言:C

我有一个要求,例如,我不应该更改 exe 的清单或 exe 文件的属性来以管理员身份运行它。是否有机会使用 createprocess/createprocessasuser api 来满足我的要求。这可以通过 shellexecute api 完成,但是我需要创建处于挂起状态的进程。这只能通过 createprocess 或 createprocessasuser api 来完成。 不胜感激,如果有人可以指导我通过这些api以管理员身份运行程序。

【问题讨论】:

  • 大声思考,但我认为可以使用 Win 7 和 Vista 的 UAC(用户帐户控制)功能请求权限提升。这很可能有一个 Win32 API。
  • 所以让我直说吧。您已决定避免使用明确记录的机制来满足您的要求,并希望存在一些其他完全不相关的替代方案来解决您的问题?
  • @Cody Gray:对我来说,最后一句话暗示他想使用这些记录在案的 API 中的一个。
  • @tomasmcguinness:他为此命名了官方 API 之一。 UAC 仅适用于进程边界。这意味着您必须创建一个新的提升流程,而不是提升现有流程。
  • 您是否同意显示 UAC 提升对话框并且用户必须输入管理员凭据,或者如果用户是管理员则同意?

标签: c visual-studio-2008 winapi process uac


【解决方案1】:

我认为你运气不好。 ShellExecute 将启动第二个提升的应用程序,因为它具有清单或因为您使用了runas 动词。 CreateProcess 不会。

也许您可以使用 CreateProcess 启动暂停的第二个应用程序,然后可以使用 ShellExecute 启动实际执行特权操作的提升的第三个应用程序?或者,您可以运行提升的整套应用程序,或将功能移动到免 UAC 的服务中。

【讨论】:

    【解决方案2】:

    我认为最简单的解决方案是通过runas /user:administrator "yourprocess.exe" 路由您尝试启动的进程,或者将runas 字符串文字提供给ShellExecute 的第二个参数。这似乎是一个难以记录的未记录功能。

    ShellExecute(
        NULL,
        _T("runas"),
        _T("notepad.exe"),
        _T(""),    // params
        NULL,        // directory
        SW_SHOW
    );
    

    【讨论】:

    • 谢谢伙计。我已经在 shellexecute 中锻炼过,这对我没有帮助。所以我在我的问题中提到我正在寻找机会通过 createprocess 或 createprocessasuser api 来做这件事
    【解决方案3】:

    这是不可能的,因为会违反这种限制的全部目的

    允许它,即使是出于“善意”,仍然构成安全漏洞。

    Blockquote 哦,来吧。两件事:你完全低估了坏人(他们中的许多人都很聪明,不会问这样的问题),看起来。并且仅仅因为有人想做“hacky”的事情并不意味着它是出于恶意目的。 – STATUS_ACCESS_DENIED

    【讨论】:

    • 我只是明确表示我并没有要求跳过管理员身份验证。我只想通过(创建进程或createprocessasuser API)以管理员权限执行普通的exe。我很高兴提供执行证书。
    • @Beetles 您不需要更改清单(假设 exe 没有),您只需将一个添加到目录中,如果为用户正确配置,Windows 应该使用它。跨度>
    猜你喜欢
    • 2015-01-04
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 2015-01-27
    • 1970-01-01
    • 2011-03-13
    相关资源
    最近更新 更多