在 Windows 中,有没有办法在 C++ 中启动进程,然后在完成后将其吐出到 stdout 中?如有必要,必须使用提升的权限(在 Vista 或更高版本上)运行该进程。
我目前正在使用 ShellExecuteEx() 启动进程并运行 while 循环,直到 GetExitCodeProcess() 不再通过 lpExitCode 参数返回 STILL_ACTIVE(使用 WaitForSingleObject() 调用在每次迭代期间执行 100 毫秒等待)。
没有简单的方法可以做到这一点。
Calling ShellExecuteEx()
与runas
verb 发送 RPC 消息到AppInfo NT 服务然后从提升的会话中运行该应用程序。没有 API 可以轻松地将提升进程的输入/输出连接到您的应用程序。
托马斯·赫鲁斯卡在他的代码项目文章介绍了他的实施CreateProcessElevated()
解决这个问题的函数。
而不是直接运行提升的程序CreateProcessElevated()
依赖于另一个接收名称的可执行文件标准输入、标准输出、标准错误命名管道并在调用之前在提升的会话中重新创建其句柄CreateProcess()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)