我想在C#WPF應用程序中執行BackgroundWorker
的控制檯/批處理應用程序,並在文本框中顯示輸出。進程控制檯輸出不重定向
批處理應用程序如下:
@echo off
echo start
"D:\openjdk-1.7.0-u40\bin\javac.exe"
echo finish
我的C#代碼是:
Process process = new Process();
process.StartInfo.FileName = @"D:\exec.bat";
process.StartInfo.CreateNoWindow = true;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardInput = true;
process.OutputDataReceived += new DataReceivedEventHandler(delegate(object sendingProcess, DataReceivedEventArgs outLine)
{
backgroundWorker.ReportProgress(0, System.Environment.NewLine + outLine.Data);
});
process.Start();
process.BeginOutputReadLine();
process.WaitForExit();
我一直在使用這個閱讀控制檯流也試過:
string output = process.StandardOutput.ReadToEnd();
backgroundWorker.ReportProgress(0, System.Environment.NewLine + output);
在我的輸出,它顯示start
和finish
,但沒有從javac.exe輸出,而如果我自己從cmd.exe運行該批處理文件,它會執行。
如何讓javac.exe的輸出顯示?
是從javac的成功輸出的輸出?或者它是一個錯誤?這也可能值得使用RedirectStandardError。 – thudbutt
javac只是顯示它的命令行選項,因爲我沒有提供任何。但我已經嘗試過,與'process.BeginErrorReadLine();' –
如果我有一個調用java.exe的批處理文件,將您的問題中的代碼放到一個帶有BackgroundWorker的簡單控制檯應用程序中適用於我(我沒有javac,只有jre)。我得到開始,java命令行選項,完成。你有沒有嘗試過調用除javac以外的東西?或者將javac暫時移到不同的文件夾中? – thudbutt