gpt4 book ai didi

c# - 在命令提示符下获取已经运行的 Windows 进程的控制台输出?将 StreamReader 定向到命令提示符

转载 作者:可可西里 更新时间:2023-11-01 11:25:57 26 4
gpt4 key购买 nike

我正在尝试确定是否有办法通过 C# 在命令提示符下获取 Windows 环境中已在运行的进程的控制台输出。我看过an answer对于基于 linux 的系统,通过 shell 以及检索 Process object 的方法.尽管两者都没有提供获取过程输出的解决方案。

我的代码我目前通过这种方式找到一个进程(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 property它提供“可用于读取应用程序的标准输出流的 StreamReader”。 有没有办法将此 StreamReader 输入定向到命令提示符输出?

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

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

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

最佳答案

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

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

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

关于c# - 在命令提示符下获取已经运行的 Windows 进程的控制台输出?将 StreamReader 定向到命令提示符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36317573/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com