进程控制台输出不重定向

时间:2014-02-23 09:30:05

标签: c# wpf process console output

我正在尝试从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的输出?

2 个答案:

答案 0 :(得分:2)

process.Start();之后,我添加了以下代码以成功生成输出:

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

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

答案 1 :(得分:0)

使用参数

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