2009-05-26 2 views
2

Я пишу программу, которая должна запускать сервер java.jar. Мне нужно запустить процесс напрямую, чтобы я мог переписать вывод в текстовое поле, и все в целом имеют полный контроль над ним. Я попытался сделать это через CMD.exe, но это не сработает, потому что CMD.exe просто вызовет новый процесс java.exe, и я бы не контролировал его. Мне нужно напрямую вызвать java.exe, чтобы я мог контролировать и получать результат. Может ли кто-нибудь из вас рассказать мне, как преобразовать эту команду, чтобы я мог создать процесс на C# и назвать его?C#: Как выполнить эту командную строку непосредственно в java.exe?

Мне нужна эта команда CMD преобразованы:

"ява -Xmx1024m -cp ./../libs/*;l2jserver.jar net.sf.l2j.gameserver.GameServer"

в

Командная строка, которую я могу внести в Process.Arguments, чтобы я мог напрямую вызвать Java.exe.

Я пытался это сделать ... и это просто не сработает.

Я смотрел на это часами и часами ... пожалуйста, помогите кому-нибудь!

+0

Не могли бы вы показать нам, что у вас есть? – Joey

ответ

4

Часть проблемы может заключаться в том, что, несмотря на то, что документация по 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; 
      } 
     } 
    } 

Это несколько Hacky, но он найдет java.exe при условии, что Java Runtime и папка находится в переменной PATH Windows. Выполните вызов этой функции при первой попытке вашей программы найти 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;