Чтение потока jar в c # из консоли - PullRequest
2 голосов
/ 15 августа 2011

я нашел в сети некоторый код для запуска моего jar (который выводит на консоль true или false) из c # и прочитал его. На моей машине для разработки следующий код работает нормально

    private bool hasInformation(String value)
    {
        try
        {

            using (Process p = new Process())
            {
                p.StartInfo = new ProcessStartInfo("java", @" -jar myJarName.jar " + value);
                p.StartInfo.RedirectStandardOutput = true;
                p.StartInfo.UseShellExecute = false;
                p.StartInfo.CreateNoWindow = true;
                p.Start();
                String availableOrNot = p.StandardOutput.ReadToEnd();

                p.WaitForExit();
                //Trace.WriteLine("data = " + s);

                availableOrNot = availableOrNot.Trim();
                if (availableOrNot.Equals("true"))
                {
                    return true;
                }
                return false;
            }
        }
        catch (Exception e)
        {
            LogWriter.writeToLogFile(e);
        }
        return false;
    }

Проблема в том, что на моей тестовой машине код возвращает просто пустую строку, как если бы он выдавал исключение, прежде чем он мог выполнить.

Я понятия не имею, что еще нужно проверить, так как файл jar работает нормально в окне командной строки, когда я делаю это вручную, и не выдается никаких исключений (ну, по крайней мере, его не перехватывают). Все, что происходит, это то, что я получаю пустую строку, где, как и на моей машине для разработки, я получаю истинный или ложный ответ.

Надеюсь, у кого-то могут быть какие-то идеи о том, что может пойти не так, чтобы я мог провести расследование, потому что действительно застрял.

Спасибо

Редактировать: после перенаправления сообщения об ошибке, чтобы я мог прочитать его из потока, я получаю сообщение об ошибке

Невозможно получить доступ к jarfile myJarName.jar \ r \ n "

Ответы [ 3 ]

2 голосов
/ 15 августа 2011

Судя по опубликованной вами новой информации, возможно, это либо рабочий каталог, либо переменная среды CLASSPATH.

Проверьте рабочий каталог, чтобы увидеть, соответствует ли он ожидаемому (я предполагаю, что он должен совпадать с каталогом этого файла JAR), или установите его:

p.StartInfo.WorkingDirectory = "C:\\path to my JAR file";

В качестве альтернативы, установите CLASSPATH:

p.StartInfo.EnvironmentVariables["CLASSPATH"] = "C:\\.....";
1 голос
/ 15 августа 2011

Наиболее вероятной причиной вашей проблемы является то, что ваша переменная окружения CLASSPATH установлена ​​по-разному на двух компьютерах.В одном случае он включает myJarName.jar, а в другом - нет.

0 голосов
/ 15 августа 2011

Вы должны исправить свой код, чтобы разрешить читать вывод. Вы должны инициализировать RedirectStandardOutput. Пример,

        var processInfo = new ProcessStartInfo(commandName, commandArgumentsForLogging);
        processInfo.CreateNoWindow = true;
        processInfo.RedirectStandardError = true;
        processInfo.RedirectStandardOutput = true;
        processInfo.UseShellExecute = false;
        processInfo.ErrorDialog = false;

        var p = new Process { StartInfo = processInfo };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...