KDe*_*ker 7 c# windows process
我试图确定是否有办法通过 C# 在命令提示符下获取 Windows 环境中已运行进程的控制台输出。我已经通过 shell看到了基于 linux 的系统的答案以及检索Process对象的方法。虽然两者都没有提供获得过程输出的解决方案。
我的代码我目前以这种方式找到一个进程(MongodDB 守护进程)
Process[] procs = Process.GetProcessesByName("mongod");
if (procs.Length > 0)
{
MongoProcess = procs[0];
Console.Out.WriteLine("Found mongod.exe, process id: " + MongoProcess.Id);
}
Run Code Online (Sandbox Code Playgroud)
我还找到了提供“可用于读取应用程序标准输出流的 StreamReader”的Process.StandardOutput属性。有没有办法将此StreamReader输入定向到命令提示符输出?
我也知道我可以启动一个进程并显示命令提示符(进程输出),但这仅当进程“由我”启动时。
Process.Start(new ProcessStartInfo("notepad.exe") { CreateNoWindow = false })
Run Code Online (Sandbox Code Playgroud)
我也知道我可以简单地读取StreamReader并以我自己的方式显示输出,但我真的更喜欢只显示命令提示符。
Windows 不提供任何机制来追溯给另一个进程一个标准输出句柄,如果它是在没有创建的情况下创建的。(此外,在大多数情况下,应用程序只会在启动期间检查标准输出句柄。)
如果您知道(或可以成功猜测)特定应用程序如何生成输出,则原则上可以通过将您自己的代码注入进程来开始捕获该输出。例如,如果您知道该应用程序使用 C++ 并动态链接到 VS2015 运行时库,您可能会注入调用freopen 如下所示的代码。(在这种情况下,您必须知道应用程序使用哪个运行时库,因为您在查找 的地址时指定了它freopen。)
但是,代码注入并非微不足道,并且会产生无意中导致进程发生故障的风险。此外,任何已经产生的输出几乎肯定会被丢弃并且不可逆转地丢失。
| 归档时间: |
|
| 查看次数: |
5771 次 |
| 最近记录: |