2012-02-02 95 views
0

所以我在做的是調用java.exe並用一些參數調用jar文件。如果everyting沒有問題並且該命令有效,那麼這些參數將打印到richtext框中。重定向標準錯誤

我遇到的問題是命令不正確。因此,在一次實例中,假設用戶鍵入傳入txtPassword的錯誤密碼。 Stanadard沒有被重定向。如果我在Dos控制檯中運行完全相同的命令,則會顯示消息「錯誤:身份驗證失敗」。我如何將該錯誤重定向到富文本框?我認爲重定向stdout會做到這一點,但顯然不是。

任何幫助將apprecaited。請參閱下面的代碼。

//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 
+0

你看過'Process'上的成員嗎?您可能會注意到errorDataReceived看起來像OutputDataReceived的等效版本... http://msdn.microsoft.com/en-us/library/system.diagnostics.process.errordatareceived.aspx – Chris 2012-02-02 14:16:59

回答

2

除了使用

process1.StartInfo.RedirectStandardOutput = true; 

你還需要使用

process1.StartInfo.RedirectStandardError = true; 

Gets or sets a value that indicates whether the error output of an application is written to the Process.StandardError stream

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

然後,您可以讀出錯誤,並用它做的你請:

string error = process1.StandardError.ReadToEnd(); 
+0

所以我將RedirectStandarError添加到了我的代碼中但仍然沒有... – user1158745 2012-02-02 14:22:43

+0

您是否正在閱讀錯誤? 'string error = process1.StandardError.ReadToEnd();' – 2012-02-02 14:26:34

+0

所以這個問題,現在是STDOUT沒有被重定向。 – user1158745 2012-02-02 16:26:34