如何将进程输出重定向到System.String

时间:2010-09-30 10:34:21

标签: c# .net process console response.redirect

我从.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;
    }
}

3 个答案:

答案 0 :(得分:14)

更好的方法是创建一个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();

答案 1 :(得分:6)

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

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

其中LineHandler是收集每行输出的适当方法,例如进入StringWriter

答案 2 :(得分:1)

设置
 ProcessStartInfo.RedirectStandardOutput
.RedirectStandardError
然后,您可以阅读StandardOutput返回的Process对象上的StandardErrorProcess.Start - 流。

MSDN为您提供了一个简单的样本。