Частично проблема может заключаться в том, что, несмотря на то, что в документации Framework говорится, что использование Process не всегда правильно разрешает переменные среды PATH. Если вы знаете имя папки, в которой находится Java, используйте полный путь к Java.exe, в противном случае используйте функцию, подобную следующей:
private void LocateJava()
{
String path = Environment.GetEnvironmentVariable("path");
String[] folders = path.Split(';');
foreach (String folder in folders)
{
if (File.Exists(folder + "java.exe"))
{
this._javadir = folder;
return;
}
else if (File.Exists(folder + "\\java.exe"))
{
this._javadir = folder + "\\";
return;
}
}
}
Это несколько странно, но он найдет java.exe при условии, что Java Runtime установлен и его папка находится в переменной Windows PATH. Выполните вызов этой функции в первый раз, когда вашей программе потребуется найти Java, а затем запустите Java, используя следующую команду:
//Prepare the Process
ProcessStartInfo start = new ProcessStartInfo();
if (!_javadir.Equals(String.Empty)) {
start.FileName = this._javadir + "java.exe";
} else {
start.FileName = "java.exe";
}
start.Arguments = "-Xmx1024m -cp ./../libs/*;l2jserver.jar net.sf.l2j.gameserver.GameServer";
start.UseShellExecute = false;
start.RedirectStandardInput = true;
start.RedirectStandardOutput = true;
//Start the Process
Process java = new Process();
java.StartInfo = start;
java.Start();
//Read/Write to/from Standard Input and Output as required using:
java.StandardInput;
java.StandardOutput;