Внешняя команда Java: не найдена, createProcess errno=2

я попробую

ProcessBuilder().command("C:\\Windows\\System32\\sc.exe query power");

или

ProcessBuilder().command("c:/windows/system32/sc.exe query power");

или

ProcessBuilder().command("c:/windows/system32/sc query power");

Я всегда получаю одну и ту же ошибку...

Пожалуйста, внимательно перечитайте Javadoc (особенно примеры) для ProcessBuilder.

Jim Garrison 11.04.2019 17:55

Это недопустимый код Java. Вам не хватает очень важного ключевого слова new, чтобы сделать его действительным.

Andreas 11.04.2019 18:05

новое здесь, извините за частичную вставку

Minstrel 11.04.2019 18:17
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
3
21
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны отправлять каждый аргумент для sc.exe отдельно в ProcessBuilder, чтобы избежать проблем с экранированием или цитированием аргумента. Прямо сейчас у вас есть вся команда в виде одного выражения String, это вызывает проблему.

Так как каталог C:\Windows\System32 должен быть в системе PATH этого должно хватить.

ProcessBuilder pb = new ProcessBuilder("sc.exe", "query", "power");
Process p = pb.start();
int result = p.waitFor();

в конечном счете, я использовал new ProcessBuilder("sc", "query", "power");, так что да, это в пути, и да, я думаю, что это лучший способ сделать, потому что «cmd arg1 arg2 и т. д.» интерпретируется jvm как одно имя exe (поэтому с пробелами) спасибо!

Minstrel 11.04.2019 18:18

Другие вопросы по теме