我正在使用C#。
我有C#控制台应用程序,我想从另一个C#应用程序获取输出。
我的流程如下:
Process[] proc = Process.GetProcessByName("MyConsoleApp");
如何获取输出?
我无法从另一个C#应用程序中运行该应用程序,只能按名称获取该过程。
我正在尝试:
proc[0].StartInto.RedirectStandardOutput = true;
proc[0].StandardOutput.ReadLine();//Throw an exception
我有一个例外:
标准输出尚未重定向或该过程尚未开始
那么我如何在不运行过程的情况下读取输出?
答案 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上访问任何随机进程的标准输出。
执行此操作的唯一方法是自己创建流程。