正在重定向标准错误

本文关键字:错误 标准 重定向 | 更新日期: 2023-09-27 18:22:09

所以我要做的是调用java.exe,并用一些参数调用一个jar文件。如果一切正常并且命令有效,那么参数将打印到富文本框中。

我遇到的问题是命令不正确。因此,在一个例子中,假设用户输入了错误的密码,该密码被传递到txtPassword中。Stanadard out没有被重定向。如果我在Dos控制台中运行完全相同的命令,则会显示消息"错误:验证失败"。如何将该错误重定向到富文本框?我原以为重定向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流

http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.redirectstandarderror.aspx

然后你可以读出错误并按照你的意愿处理:

string error = process1.StandardError.ReadToEnd();

使用RedirectStandardError属性的方式与使用RedirectStandard输出属性的方式相同。