5

我正在从 .NET 应用程序调用 Java 进程,我需要将控制台输出重定向到 System.String 以进行稍后的解析。请指教。我会很感激简短的代码示例。

public bool RunJava(string fileName)
{
    try
    {
        ProcessStartInfo psi = new ProcessStartInfo();
        psi.CreateNoWindow = true;
        psi.UseShellExecute = false;
        psi.EnvironmentVariables.Add("VARIABLE1", "1");
        psi.FileName = "JAVA.exe";
        psi.Arguments = "-Xmx256m jar.name";

        Process.Start(psi);
        return true;
    }
    catch (Exception ex)
    {
        return false;
    }
}
4

3 回答 3

15

更好的方法是创建一个Process实例并使用如下流捕获输出:

Process cmd = new Process();
cmd.StartInfo.FileName = "JAVA.exe";
cmd.StartInfo.Arguments = "-Xmx256m jar.name";
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.EnvironmentVariables.Add("VARIABLE1", "1");
cmd.Start();

StreamReader sr = cmd.StandardOutput;
string output = sr.ReadToEnd();
cmd.WaitForExit();
于 2010-09-30T10:48:30.010 回答
7

你需要将RedirectStandardOutput设置为true,然后最简单的获取结果的方法就是使用事件驱动机制:

Process p = Process.Start(psi);
p.BeginOutputReadLine(LineHandler);
p.EnableRaisingEvents = true;

whereLineHandler是收集每一行输出的适当方法,例如到StringWriter.

于 2010-09-30T10:39:26.357 回答
2

设置
ProcessStartInfo.RedirectStandardOutput

.RedirectStandardError。然后
,您可以读取从.StandardOutputStandardErrorProcess.Start

MSDN 为您提供了一个不错且简单的示例。

于 2010-09-30T10:42:21.427 回答