用C++读取另一个进程'stdout

Rob*_*obH 8 c++ windows stdout

在Windows中,有没有办法在C++中启动进程,然后在完成后读取它在stdout中吐出的内容?必要时,必须使用提升的权限(在Vista或更高版本上)运行该进程.

我目前正在使用ShellExecuteEx()来启动进程并运行while循环,直到GetExitCodeProcess()不再通过lpExitCode参数返回STILL_ACTIVE(在每次迭代期间使用WaitForSingleObject()调用执行100毫秒的等待).

Ale*_*min 3

没有简单的方法可以做到这一点。

ShellExecuteEx()使用动词调用runas将 RPC 消息发送到AppInfo NT 服务,然后从提升的会话运行应用程序。没有 API 可以轻松地将提升进程的输入/输出连接到您的应用程序。

Thomas Hruska 在他的代码项目文章中介绍了他CreateProcessElevated()解决此问题的函数的实现。

不是直接运行提升的程序,而是依赖于另一个可执行文件,该可执行文件接收stdin、stdout、stderrCreateProcessElevated()命名管道的名称,并在调用之前在提升的会话中重新创建它们的句柄。CreateProcess()