【问题标题】:CreateProcess to run as administratorCreateProcess 以管理员身份运行
【发布时间】:2011-03-24 15:03:04
【问题描述】:

在我的 Win32 应用程序中,我能够运行具有重定向输入和输出到我创建和管理的匿名管道的子进程 - 这一切都适用于 CreateProcess() 函数。 但是,在 Win7(可能是 Vista)上,如果需要以管理员身份运行该进程,则此操作将失败。因此,我正在寻找一种在资源管理器中执行相当于“以管理员身份运行”命令的方法,该命令将显示标准 UAC 提示符,然后创建具有提升权限的进程。 我已经看到有关使用 ShellExecute 的“runas”选项来执行此操作的文章,但是当我看到它时,我没有控制我需要将 std 输入和输出重定向到我的管道。 有什么建议吗?

【问题讨论】:

  • 这可能是不可能的。您可以修改子应用吗?

标签: winapi uac createprocess


【解决方案1】:

如果你在子应用上放了一个manifest,如果你使用ShellExecute来启动,它会使用manifest并且会有一个UAC提示。 (在大多数情况下,与“runas”方法相比,我更喜欢这种方法。)这可以让您以您喜欢的方式启动应用程序,而无需担心 UAC,并从清单中获取提升。

但是,如果您提到的“管理”部分涉及较低权限的应用程序与提升的应用程序通信,您可能会遇到问题。 UAC 禁止这样做。

【讨论】:

  • 有一些条件允许,例如,ChangeWindowMessageFilter
【解决方案2】:

应该可以在 CreateProcess 调用之前将环境变量 __COMPAT_LAYER 设置为 RunAsAdmin,这会告诉 Windows 通过兼容性标志强制以管理员身份运行。进程启动后可以删除环境变量。

【讨论】:

    猜你喜欢
    • 2012-11-22
    • 2016-09-20
    • 2010-11-26
    • 2012-05-28
    • 2021-08-10
    • 1970-01-01
    • 2022-01-08
    • 2015-01-22
    • 2017-05-19
    相关资源
    最近更新 更多