我有一个从.bat文件运行的Java .jar应用程序,以便将参数传递给Java应用程序。应用程序打开一个控制台(确切地说是cmd.exe),定期向它写入内容并接受一些命令。我正在尝试在C#Winforms中创建一种包装它以便于它的使用。如何使用与.bat文件中相同的参数运行.jar,捕获实时输出和写入执行命令?
答案 0 :(得分:2)
是的,可以使用.NET Framework中的System.Diagnostics.Process class和ProcessStartInfo 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将输入数据发送到已启动的应用程序。