C #: Как мне выполнить эту командную строку непосредственно в java.exe? - PullRequest
2 голосов
/ 26 мая 2009

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

Мне нужна конвертированная команда CMD:

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

в

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

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

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

1 Ответ

4 голосов
/ 26 мая 2009

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