C# 重定向标准错误输出

C# 重定向标准错误输出,c#,redirectstandardoutput,C#,Redirectstandardoutput,因此,我要做的是调用java.exe并使用一些参数调用jar文件。如果一切正常且命令正常,则参数将打印到richtext框中 我遇到的问题是命令不正确。因此,在once实例中,假设用户输入了错误的密码,并将其传递到txtPassword中。Stanadard out未被重定向。如果在Dos控制台中运行完全相同的命令,将显示消息“Error:Auth fail”。如何将该错误重定向到富文本框?我以为重定向stdout就可以了,但显然不行 任何帮助都将受到感谢。请参阅下面的代码 //Declar

因此,我要做的是调用java.exe并使用一些参数调用jar文件。如果一切正常且命令正常,则参数将打印到richtext框中

我遇到的问题是命令不正确。因此,在once实例中,假设用户输入了错误的密码,并将其传递到txtPassword中。Stanadard out未被重定向。如果在Dos控制台中运行完全相同的命令,将显示消息“Error:Auth fail”。如何将该错误重定向到富文本框?我以为重定向stdout就可以了,但显然不行

任何帮助都将受到感谢。请参阅下面的代码

  //Declare and instantiate a new process component.
                System.Diagnostics.Process process1;
                process1 = new System.Diagnostics.Process();
                process1.StartInfo.UseShellExecute = false;
                process1.StartInfo.RedirectStandardOutput = true;
                process1.StartInfo.CreateNoWindow = true;

                process1.StartInfo.FileName = "java.exe ";

                toLoad = lstBarToLoad.Items[i].Text;

               process1.StartInfo.Arguments = "-Xmx512M -jar Deploy.jar" + txtPassword;
               process1.StartInfo.Arguments += toLoad;

              Console.WriteLine(process1.StartInfo.Arguments);

              process1.Start();
              process1.OutputDataReceived += (s, a) => myMethod(a);
              process1.BeginOutputReadLine();

   //myMthod
     private void myMethod(DataReceivedEventArgs e)
    {
         if (e.Data != null)
        {
            Action action = () => rchsdtOut.Text += "\r\n" + e.Data.ToString();
            rchsdtOut.BeginInvoke(action, null);
            Console.WriteLine(e.Data.ToString());
        }
    }//end of private
以及使用

process1.StartInfo.RedirectStandardOutput = true;
您还需要使用

process1.StartInfo.RedirectStandardError = true;
获取或设置一个值,该值指示是否将应用程序的错误输出写入Process.StandardError流

然后,您可以读取错误并根据自己的意愿进行处理:

string error = process1.StandardError.ReadToEnd();

使用属性的方式与使用RedirectStandardOutput属性的方式相同。

您查看了
过程中的成员了吗?您可能会注意到errorDataReceived,它看起来像OutputDataReceived的等效版本。。。你看到错误了吗<代码>字符串错误=process1.StandardError.ReadToEnd()所以问题是,现在STDOUT没有被重定向。你在做什么:
process1.Start();process1.BeginOutputReadLine();process1.BeginErrorReadLine();process1.WaitForExit()是。下面是我正在使用的代码:process1.Start();process1.OutputDataReceived+=(s,a)=>myMethod(a);process1.BeginOutputReadLine();process1.StandardError.ReadToEnd();字符串错误=process1.StandardError.ReadToEnd();rchsdtOut.Text=错误;注释对代码来说并不是很好。如果你还能读,请告诉我。STDError现在被重定向,但不再是我的常规输出。我会发布一个新的问题,因为这个问题已经得到了回答。