【发布时间】:2014-02-23 09:30:05
【问题描述】:
我正在尝试从 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。
-
javac 只是显示它的命令行选项,因为我没有提供任何选项。但我已经试过了,还有
process.BeginErrorReadLine(); -
如果我有一个调用 java.exe 的批处理文件(我没有 javac,只有 jre),则将问题中的代码放入带有 BackgroundWorker 的简单控制台应用程序中对我有用。我开始,java命令行选项,完成。你试过调用 javac 以外的东西吗?还是暂时将 javac 移到不同的文件夹中?
-
我最终找到了解决方案,请参阅我的答案。
标签: c# wpf process console output