.net core 如何利用其他流程'`stderr`和stdout`?

.net core 如何利用其他流程'`stderr`和stdout`?,.net-core,c#,.net,process,stdout,.net Core,C#,.net,Process,Stdout,这个问题与作为重复提出的问题不同: 我的问题非常具体。也就是说,即使有针对“classic”.NET Framework的解决方案,它也可能不适用于.NET核心环境 在发布的问题之间有一个明显的(8年!)时间间隔 请不要把它当作复制品,因为它不是 我发现自己无法点击stderr和stdout在我的应用程序进程之外创建的进程流 targetProcessList属于List类型 下面的代码 foreach (var proc in targetProcessList) { proc.S

这个问题与作为重复提出的问题不同:

  • 我的问题非常具体。也就是说,即使有针对“classic”.NET Framework的解决方案,它也可能不适用于.NET核心环境
  • 在发布的问题之间有一个明显的(8年!)时间间隔
  • 请不要把它当作复制品,因为它不是


    我发现自己无法点击
    stderr
    stdout
    在我的应用程序进程之外创建的进程流

    targetProcessList
    属于
    List
    类型


    下面的代码

    foreach (var proc in targetProcessList)
    {
        proc.StandardError.ReadToEndAsync().ContinueWith(t => Console.WriteLine(t.Result));
        proc.StandardOutput.ReadToEndAsync().ContinueWith(t => Console.WriteLine(t.Result));
    }
    
    导致
    InvalidOperationException
    (可能是因为该流程未针对此类用途进行配置):


    因此,我尝试动态启用重定向,如下所示:

    foreach (var proc in targetProcessList)
    {
        proc.StartInfo.RedirectStandardError = true;
        proc.StartInfo.RedirectStandardOutput = true;
        proc.StandardError.ReadToEndAsync().ContinueWith(t => Console.WriteLine(t.Result));
        proc.StandardOutput.ReadToEndAsync().ContinueWith(t => Console.WriteLine(t.Result));
    }
    
    但仍然在运行时被打耳光



    有办法解决这个问题吗?

    您是用代码创建这些流程的吗?你能把它也贴出来吗?@AseemGautam我问题的第一句话是:“关于在我的申请过程之外创建的过程”,这一点被问到了——尽管没有解决办法。你所指的问题可能与@AseemGautam重复,但已经过时了(2010年)并且可能适用于也可能不适用于.NET核心环境。
    foreach (var proc in targetProcessList)
    {
        proc.StartInfo.RedirectStandardError = true;
        proc.StartInfo.RedirectStandardOutput = true;
        proc.StandardError.ReadToEndAsync().ContinueWith(t => Console.WriteLine(t.Result));
        proc.StandardOutput.ReadToEndAsync().ContinueWith(t => Console.WriteLine(t.Result));
    }
    
    [c:\           \HRIS.Web] dotnet run :       User profile is available. Using '                 \AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest.
    [c:\           \HRIS.Web] dotnet run :
    [c:\           \HRIS.SPA] npm run start-prodish-for-e2e ||| [14952] cmd
    [c:\           \HRIS.SPA] npm run start-prodish-for-e2e ||| [10784] conhost
    System.InvalidOperationException: Process was not started by this object, so requested information cannot be determined.
       at System.Diagnostics.Process.get_StartInfo()
       at RunE2E.Program.StartProcessViaCmd(String command, String arguments, String workingDirectory)
       at RunE2E.Program.Main(String[] args)
    System.NullReferenceException: Object reference not set to an instance of an object.
       at RunE2E.Program.Main(String[] args)