5

I am calling Java process from .NET application and I need to redirect console output to System.String to do some later parsing. Please advice. I would appreciate short code example.

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;
    }
}
Captain Comic
  • 14,954
  • 43
  • 105
  • 144

3 Answers3

15

A better way will be to create a Process instance and capture the output using a stream like this:

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();
Yogesh
  • 14,108
  • 6
  • 41
  • 68
7

You need to set RedirectStandardOutput to true, and then the easiest way of getting the results is to use the event-driven mechanism:

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

where LineHandler is an appropriate method to collect each line of output, e.g. into a StringWriter.

Jon Skeet
  • 1,335,956
  • 823
  • 8,931
  • 9,049
2

Set
ProcessStartInfo.RedirectStandardOutput
and
.RedirectStandardError.
Then you can read the StandardOutput and StandardError-streams on the Process-object that is returned from Process.Start.

MSDN have a nice and simple sample for you.

Mustafa Ekici
  • 6,932
  • 8
  • 52
  • 72
Rune
  • 766
  • 6
  • 17