c# - 从运行过程中获取输出
问题描述
我正在使用 C#。
我有 C# 控制台应用程序,我想从另一个 C# 应用程序获取输出。
我的流程如下:
Process[] proc = Process.GetProcessByName("MyConsoleApp");
我怎样才能得到输出?
我无法从另一个 C# 应用程序运行该应用程序,我只能按名称获取进程。
我正在尝试什么:
proc[0].StartInto.RedirectStandardOutput = true;
proc[0].StandardOutput.ReadLine();//Throw an exception
我有一个例外:
标准输出尚未重定向或进程尚未开始
那么如何在不运行进程的情况下读取输出呢?
解决方案
如果你想重定向标准输出,进程需要由你的程序运行,否则操作系统不会让你这样做[安全措施,你不希望随机程序在你登录时访问你的密码存储或浏览器您的银行帐户,好吗?],在这种情况下,您首先需要设置UseShellExecute
为false
.
所以像这样:
proc[0].StartInto.UseShellExecute = false;
proc[0].StartInto.RedirectStandardOutput = true;
proc[0].StandardOutput.ReadLine();
但是如果你真的无法从你的程序运行进程,你需要设置其他方式让它们通信,无论是磁盘、管道、Azure 服务总线上某处的临时文件,有很多方法,但你不能做一个进程只是找到其他进程并读取它的输出。