Перенаправление стандартной ошибки - PullRequest
0 голосов
/ 02 февраля 2012

Итак, я делаю, вызывая java.exe и вызывая файл jar с некоторыми аргументами. Если все в порядке и команда работает, аргументы выводятся в поле расширенного текста.

Проблема в том, что команда неверна. Так, в одном случае, скажем, пользователь вводит неправильный пароль, который передается в txtPassword. Выход из Станадарда не перенаправляется. Если я запускаю точно такую ​​же команду в консоли 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

Ответы [ 2 ]

2 голосов
/ 02 февраля 2012

Помимо использования

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();
0 голосов
/ 02 февраля 2012

Вы можете использовать RedirectStandardError свойство так же, как вы используете свойство RedirectStandardOutput.

...