获取已经运行的Windows进程控制台输出在命令提示符? 直接StreamReader来命令提示符

我正在尝试确定是否有方法在命令提示符下通过C#在Windows环境中获取已经运行的进程的控制台输出。 我已经通过shell看到了基于Linux系统的答案 ,也是一种检索Process对象的方法 。 虽然都没有提供一个解决scheme来获得过程的输出。

我的代码我现在find一个进程(MongodDB守护进程)这种方式

 Process[] procs = Process.GetProcessesByName("mongod"); if (procs.Length > 0) { MongoProcess = procs[0]; Console.Out.WriteLine("Found mongod.exe, process id: " + MongoProcess.Id); } 

我还发现了Process.StandardOutput属性 ,它提供了“一个StreamReader,可以用来读取应用程序的标准输出stream”。 有没有办法将这个StreamReaderinput引导到命令提示符输出?

我也知道我可以启动一个进程并显示命令提示符(进程输出),但这只是当进程“由我”启动时。

 Process.Start(new ProcessStartInfo("notepad.exe") { CreateNoWindow = false }) 

我也知道,我可以简单地从StreamReader读取并以我自己的方式显示输出,但我真的更喜欢只显示一个命令提示符。

Solutions Collecting From Web of "获取已经运行的Windows进程控制台输出在命令提示符? 直接StreamReader来命令提示符"

Windows不提供任何机制来追溯给另一个进程一个标准的输出句柄,如果它没有创建一个。 (另外,在大多数情况下,应用程序只会在启动时检查标准输出句柄。)

如果您知道(或可以成功猜到)特定应用程序如何生成输出, 原则上可以通过将自己的代码注入进程来开始捕获该输出。 例如,如果您知道应用程序使用C ++并动态链接到VS2015运行时库,则可能会注入调用freopen代码, 如下所示 。 (在这种情况下,您必须知道应用程序使用哪个运行时库,因为在查找freopen的地址时已经指定了它。)

但是,代码注入并不是微不足道的,并且会造成无意中导致进程故障的风险。 而且, 已经产生的任何输出几乎肯定会被丢弃,并且不可挽回地丢失。