如何使用参数打开外部Java控制台应用程序,捕获输出并在其上执行命令?

时间:2014-04-04 18:56:16

标签: c# java winforms batch-file

我有一个从.bat文件运行的Java .jar应用程序,以便将参数传递给Java应用程序。应用程序打开一个控制台(确切地说是cmd.exe),定期向它写入内容并接受一些命令。我正在尝试在C#Winforms中创建一种包装它以便于它的使用。如何使用与.bat文件中相同的参数运行.jar,捕获实时输出和写入执行命令?

1 个答案:

答案 0 :(得分:2)

是的,可以使用.NET Framework中的System.Diagnostics.Process classProcessStartInfo class来执行此操作。 Process 类用于控制(启动/停止)所需的进程(应用程序), ProcessStartInfo 类用于配置将要启动的进程实例(参数,重定向输入和输出,显示/隐藏过程窗口等。)

启动jar文件的代码如下所示:

var jarFile = "D:\\software\\java2html\\java2html.jar");
// location of the java.exe binary used to start the jar file
var javaExecutable = "c:\\Program Files (x86)\\Java\\jre7\\bin\\java.exe";

try
{
    // command line for java.exe in order to start a jar file: java -jar jar_file
    var arguments = String.Format(" -jar {0}", jarFile);
    // create a process instance
    var process = new Process();
    // and instruct it to start java with the given parameters
    var processStartInfo = new ProcessStartInfo(javaExecutable, arguments);
    process.StartInfo = processStartInfo;
    // start the process
    process.Start();
}
catch (Exception exception)
{
    Console.WriteLine(exception.Message);
}

start a jar file的常用方法是:

java -jar file.jar

可以肯定的是,该进程将查找(在本例中为java)可执行文件,最好指定要启动的进程的完全限定路径。

要重定向您正在启动的应用程序的标准输出,您需要将ProcessStartInfo.RedirectStandardOutput property设置为true,然后使用Process.StandardOutput property stream获取已启动应用程序的输出。上例中的应用程序修改代码如下所示:

// command line for java.exe in order to start a jar file: java -jar jar_file
var arguments = String.Format(" -jar {0}", jarFile);
// indicate, that you want to capture the application output
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
// create a process instance
var process = new Process();
// and instruct it to start java with the given parameters
var processStartInfo = new ProcessStartInfo(javaExecutable, arguments);
process.StartInfo = processStartInfo;
// start the process
process.Start();
// read the output from the started appplication
string output = process.StandardOutput.ReadToEnd();
process.WaitForExit();

如果您也想控制输入,请将ProcessStartInfo.RedirectStandarInput property设置为true,然后使用Process.StandardInput property stream将输入数据发送到已启动的应用程序。