【问题标题】:Process console output not redirecting进程控制台输出未重定向
【发布时间】: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);

在我的输出中,它显示 startfinish,但 javac.exe 没有输出,而如果我自己从 cmd.exe 运行批处理文件,它会显示。

如何让javac.exe的输出出现?

【问题讨论】:

  • javac的输出是否成功输出?或者这是一个错误?也可能值得使用 RedirectStandardError。
  • javac 只是显示它的命令行选项,因为我没有提供任何选项。但我已经试过了,还有process.BeginErrorReadLine();
  • 如果我有一个调用 java.exe 的批处理文件(我没有 javac,只有 jre),则将问题中的代码放入带有 BackgroundWorker 的简单控制台应用程序中对我有用。我开始,java命令行选项,完成。你试过调用 javac 以外的东西吗?还是暂时将 javac 移到不同的文件夹中?
  • 我最终找到了解决方案,请参阅我的答案。

标签: c# wpf process console output


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    用参数启动javac.exe

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

    【讨论】:

    • 仍然没有输出到文本框
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 2015-02-11
    • 2018-10-18
    • 2015-03-10
    相关资源
    最近更新 更多