在我的Win32应用程序中,我能够运行带有重定向输入和输出的子进程到我创建和管理的匿名管道 - 这一切都适用于CreateProcess()函数。 但是在Win7(可能是Vista)上,如果需要以管理员身份运行该进程,则会失败。所以我正在寻找的方法是在资源管理器中执行相当于“run as administrator”命令的方法,该命令将显示标准的UAC提示,然后使用提升的权限创建进程。 我看过有关使用ShellExecute的“runas”选项来执行此操作的文章,但是当我看到它时,我没有控件,我需要将std输入和输出重定向到我的管道。 有什么建议吗?
答案 0 :(得分:2)
如果您在子应用程序上放置清单,并且如果使用ShellExecute启动,它将使用清单,并且将出现UAC提示。 (在大多数情况下,我更倾向于使用“runas”方法。)这可能允许您按照自己喜欢的方式启动应用程序而不必担心UAC,并从清单中获得提升。
但是,如果您引用的“管理”部分涉及较低权限应用程序与较高权限进行通信,则可能会出现问题。 UAC禁止这样做。
答案 1 :(得分:0)
应该可以在CreateProcess调用之前将环境变量__COMPAT_LAYER
设置为RunAsAdmin
,该调用告诉Windows只是通过兼容性标志强制以admin身份运行。启动过程后即可删除环境变量。