从运行的进程获取输出

时间:2018-08-19 07:49:39

标签: c#

我正在使用C#。

我有C#控制台应用程序,我想从另一个C#应用程序获取输出。

我的流程如下:

Process[] proc = Process.GetProcessByName("MyConsoleApp");

如何获取输出?

我无法从另一个C#应用程序中运行该应用程序,只能按名称获取该过程。

我正在尝试:

proc[0].StartInto.RedirectStandardOutput = true;
proc[0].StandardOutput.ReadLine();//Throw an exception

我有一个例外:

  

标准输出尚未重定向或该过程尚未开始

那么我如何在不运行过程的情况下读取输出?

2 个答案:

答案 0 :(得分:0)

如果要重定向标准输出,则需要由程序运行进程,否则OS将不允许您执行此操作[安全措施,当您处于安全状态时,您不希望随机程序访问密码存储库或浏览器。登录您的银行帐户,对吗?],在这种情况下,您首先需要将UseShellExecute设置为false

像这样:

proc[0].StartInto.UseShellExecute = false;
proc[0].StartInto.RedirectStandardOutput = true;
proc[0].StandardOutput.ReadLine();

但是,如果您真的无法从程序中运行进程,则需要设置其他方式进行通信,例如,它是磁盘,管道,Azure Service Bus上某个位置的临时文件,但是有很多方法,但是您无法使一个进程仅找到另一个进程并读取其输出。

答案 1 :(得分:0)

除非使用Win32 debugging APIs,否则您无法在Windows上访问任何随机进程的标准输出。

执行此操作的唯一方法是自己创建流程。