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