2014-02-23 78 views
0

我想在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); 

在我的輸出,它顯示startfinish,但沒有從javac.exe輸出,而如果我自己從cmd.exe運行該批處理文件,它會執行。

如何讓javac.exe的輸出顯示?

+0

是從javac的成功輸出的輸出?或者它是一個錯誤?這也可能值得使用RedirectStandardError。 – thudbutt

+0

javac只是顯示它的命令行選項,因爲我沒有提供任何。但我已經嘗試過,與'process.BeginErrorReadLine();' –

+0

如果我有一個調用java.exe的批處理文件,將您的問題中的代碼放到一個帶有BackgroundWorker的簡單控制檯應用程序中適用於我(我沒有javac,只有jre)。我得到開始,java命令行選項,完成。你有沒有嘗試過調用除javac以外的東西?或者將javac暫時移到不同的文件夾中? – thudbutt

回答

2

process.Start();後添加以下代碼成功地產生輸出:

do 
{ 
    string output = process.StandardOutput.ReadToEnd(); 

    buildWorker.ReportProgress(0, System.Environment.NewLine + output); 
} 
while (!process.HasExited); 
0

開始的javac.exe與參數:

@echo off 
echo start 
start "D:\openjdk-1.7.0-u40\bin\javac.exe" /? 
echo finish 
+0

仍然不輸出到文本框 –

相關問題