Команда Java через CMD не работает в C#. NET - PullRequest
0 голосов
/ 09 января 2020

Я пытаюсь запустить команду java в cmd, используя C#, чтобы получить некоторые входные данные для моей программы, путь для Java задан правильно, и я могу запускать команды Java в cmd без проблем, но когда я попробовал его в C#, он показывает, что «java» не распознается как внутренняя или внешняя команда, работающая программа или пакетный файл. », как будто путь не задан ,

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

string cmd = @"/c java -jar """ + $"{treeEditDistanceDataFolder}libs" + $@"\RTED_v1.1.jar"" -f ""{f1}"" ""{f2}"" -c 1 1 1 -s heavy --switch -m";
Console.WriteLine(cmd);
var proc = new Process();
proc.StartInfo.FileName = "cmd.exe";
proc.StartInfo.Arguments = cmd;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.Start();
Console.WriteLine("Process started");
string output = proc.StandardOutput.ReadToEnd();
Console.WriteLine("Output was read");
string error = proc.StandardError.ReadToEnd();
proc.WaitForExit();

1 Ответ

2 голосов
/ 09 января 2020

Эта строка является вашей проблемой:

proc.StartInfo.UseShellExecute = false;

Когда UseShellExecute равен true, переменные системы и пользователя PATH будут использоваться, если приложение для запуска - это просто имя исполняемого файла. Поскольку вы устанавливаете его на false, а java не существует в папке вашего приложения, NET не может его найти.

У вас есть два варианта:

  1. Установите UseShellExecute на true, чтобы он мог использовать переменную PATH для поиска java.
  2. Использовать полный путь, например, "C:\Program Files\Java\jdk1.8.0_101\bin\java"

См. этот ответ для получения дополнительной информации.

...