Подтвердить что ты не робот

Возможные причины java.io.IOException: Ошибка CreateProcess = 5

Какие проблемы могут привести к тому, что метод Java ProcessBuilder.start возвращает IOException с примечанием, в котором говорится об ошибке = 5?

В частности, мы увидели, что система удаленного клиента запускает некоторый код Java по строкам...

ProcessBuilder pb = new ProcessBuilder(cmdArray);
pb.redirectErrorStream(true);
Process p = pb.start();

... вывести исключения вроде этого...

java.io.IOException: CreateProcess: C:\example\example.exe argument1 argument2 error=5
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)
at java.lang.ProcessBuilder.start(Unknown Source)
at example_code_above

Мы подтвердили, что команда, отмеченная в исключении, "C:\example\example.exe аргумент1 аргумент2" может быть успешно запущена вручную через cmd.exe, поэтому мы уверены, что сама команда не нарушена.

4b9b3361

Ответ 1

error=5 означает один из:

1) файл не является исполняемым
2) файл недоступен

РЕДАКТИРОВАТЬ: не удалять исключение
3) команда (example.exe) выходит с кодом выхода 5

Ответ 2

Александр прав, это безопасность Windows, которая не позволяет этому процессу запускаться, но команда powershell не работает для меня. вот что я сделал:

  • Откройте проводник Windows и перейдите к example.exe
  • Щелкните правой кнопкой мыши по нему и выберите "Свойства"
  • Перейдите на вкладку "Безопасность" и нажмите кнопку "Изменить"
  • Выберите свое имя пользователя в верхней части окна, а внизу - "Полный доступ" или, по крайней мере, "Чтение и выполнение"
  • Нажмите "ОК", чтобы избавиться от этих полей.

Теперь ваш пользователь может выполнить эту программу. Ура!

Ответ 3

Иногда это происходит из-за неправильного ввода пути в код. Для окон введите "\\" в качестве разделителя пути вместо "\" Например, измените путь на "C:\\example\\example.exe"

Ответ 4

У меня такое же исключение из-за Windows UAC.

Это может произойти, даже если ваша учетная запись имеет права администратора.

Чтобы выполнить такую ​​команду, мне пришлось использовать powershell для повышения привилегий.

powershell start-process 'start.bat' -Verb RunAs