簡體   English   中英

在C ++中閱讀另一個進程的標准輸出

[英]Read another process' stdout in C++

在Windows中,是否有一種方法可以用C ++啟動進程,然后在完成后將其讀入標准輸出? 如有必要,必須使用提升的特權(在Vista或更高版本上)運行該過程。

我當前正在使用ShellExecuteEx()啟動進程並運行while循環,直到GetExitCodeProcess()不再通過lpExitCode參數返回STILL_ACTIVE(在每個迭代過程中使用WaitForSingleObject()進行100毫秒等待)。

沒有簡單的方法可以做到這一點。

runas謂詞調用ShellExecuteEx()將RPC消息發送到AppInfo NT Service巫婆,然后從提升的會話中運行應用程序。 沒有API可以輕松地將提升過程的輸入/輸出連接到您的應用程序。

Thomas Hruska在其“代碼項目”文章中介紹了解決此問題的CreateProcessElevated()函數的實現。

CreateProcessElevated()不會直接運行提升的程序,而是依賴於另一個可執行文件,該可執行文件接收stdin,stdout,stderr命名管道的名稱,並在提升的會話中重新創建其句柄,然后再調用CreateProcess()

您應該將ShellExecuteEx的使用替換為CreateProcess lpStartupInfo參數允許std in和std out處理進程。 只需使用您作為參數傳遞的CreatePipe創建一個匿名管道。 MSDN文章提供了有關如何執行此操作的示例。

您需要為子進程創建一個命名管道。 這篇MSDN文章用進行了解釋,並提供了代碼示例。

您應該能夠從中獲得幫助。

您是否不能使用CreateProcess / ShellExecuteEx來執行帶有stdout / stderr重定向的cmd shell,從而依次調用您的進程?

“ cmd / c YourProcess.exe {參數}”等?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM