Что вызывает "система не может найти указанный файл" с Runtime.exec?(Ассоциативный / Ftype) - PullRequest
3 голосов
/ 15 декабря 2011

Кто-нибудь знает, почему эти два оператора приводят к показанному исключению?

Runtime.getRuntime().exec("assoc .vlan=\"file type description\"");
Runtime.getRuntime().exec("ftype \"file type description\"=" + System.getProperty("user.home")+ "\\folder 1\\folder 2\\my executable.exe\" /inject \"%1\"");

А вот и исключение.

java.io.IOException: Cannot run program "assoc": CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
at java.lang.Runtime.exec(Runtime.java:615)
at java.lang.Runtime.exec(Runtime.java:448)
at java.lang.Runtime.exec(Runtime.java:345)

Хорошо, я изменил это, но связь все еще не установлена, тогда как та же самая команда является исполняемой и работает в командной строке cmd.

Runtime.getRuntime().exec("cmd.exe /c assoc .vlan=\"file type description\"");
Runtime.getRuntime().exec("cmd.exe /c ftype \"file type description\"=\"" + System.getProperty("user.home") + "\\folder 1\\folder 2\\my executable.exe\" /inject \"%1\"");

Любое дополнительное предложение? Спасибо!

1 Ответ

8 голосов
/ 15 декабря 2011

Как оказалось, assoc и ftype - это встроенные команды оболочки, а НЕ исполняемые файлы.То же самое верно для copy, dir и т. Д. Вместо этого вы можете запустить cmd.exe, используя параметр /c для передачи строки командной строки, например, cmd.exe /c assoc ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...