C#:重定向已经运行的进程的标准输出

时间:2010-01-19 18:10:29

标签: c# ssh cmd system.diagnostics

我一直很难获得“子流程”的输出(一个由我通过c#System.Diagnostics.Process监控的黑盒流程内部启动)

我接受了上一篇文章回答的建议: here。在那里你可以找到我经历过的细节。

此时,虽然我能够找到由process1.exe生成的ssh进程,但我正在监视。我无法将输出重定向到我的c#程序,因为它是一个“已在运行的进程”,并且不是直接从C#启动的。

似乎您在System.Diagnostics.Process对象上设置的所有属性只有在从c#应用程序显式启动该进程时才会生效;如果某个其他“非托管进程”已启动该进程,则设置此重定向无效,因为该进程已由未指定我需要的重定向的内容启动。

有没有办法重定向已经启动的进程的输出(在启动此进程之前我无法预先指定重定向的程序启动的进程)?

4 个答案:

答案 0 :(得分:2)

假设没有更直接的解决方案,您可以尝试通过CreateRemoteThread()在另一个进程中运行一段代码,解释here

答案 1 :(得分:1)

不是直接从正在运行的进程重定向输出,而是可以在输出离开进程A到预期目标时捕获输出,将其传递到新进程中?

答案 2 :(得分:1)

也许你可以看看这个code。我在寻找解决方案时找到了同样的东西;但是,它并不是真正的进程间。

如果这没有帮助,您可以查看在重定向标准输出时应该使用的P / Invoking SetStdHandleGetStdHandle。我认为这是代码示例所链接的,以便重定向发生。

注意:我只是看了看这些东西,实际上并没有让它正常工作。 (我有一个更好的解决方案,因为我可以访问输出到控制台的源代码)

答案 3 :(得分:1)

我有同样的难题。在奴隶进程中调用内部的任何内容都不是我的选择。它已经在运行,哪些代码超出了我的控制范围。但是我知道它会吐出标准输出,我想监视,处理等等。我开始这个过程是一回事,我可以配置重定向,但在这个例子中,过程将继二次启动我开始主要的奴隶过程。所以我没有这个选择。我没有找到.NET Process在这些条件下工作的方法。也许有另一种方式,也许C ++是要走的路?这可能是可以接受的,但如果可能的话,我想从.NET C#的角度来看待它。