16

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

我接受了我之前帖子的答案给出的建议: here。在那里你可以找到我所经历的细节。

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

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

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

4

4 回答 4

2

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

于 2010-01-19T18:18:38.557 回答
2

我有同样的难题。我不能在从属进程中调用任何内部的东西。它已经在运行,哪些代码超出了我的控制范围。但我确实知道它会吐出Standard Output,我想对其进行监控、处理等。这是我启动进程的一件事,我可以配置重定向,但在这种情况下,进程将在我启动后启动主从进程。所以我没有那个选项。我还没有找到让.NETProcess在这些条件下工作的方法。也许还有另一种方式,也许 C++ 是这里的方式?这将是勉强可以接受的,但如果可能的话,我想从 .NET C# 的角度来处理它。

于 2018-04-26T22:47:09.370 回答
1

或许你可以看看这段代码。我在寻找做同样事情的解决方案时发现了它;但是,它并不是真正的进程间。

如果这没有帮助,您可能可以查看 P/InvokingSetStdHandle以及GetStdHandle在重定向标准输出时应该使用的。我认为这就是链接到的代码示例使重定向发生的原因。

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

于 2010-01-19T18:45:04.067 回答
1

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

于 2010-01-19T18:15:57.023 回答