2016-08-19 2 views
1

Я пытаюсь запустить runtime.exec(String[],null, new File(directory)) с первыми двумя аргументами, которые являются «cmd» и «/ c».java runtime.exec cmd/c разбор аргументов

Я пытаюсь указать версию java для запуска моего tomcat. Похоже, что аргументы cmd/c приводят к тому, что runtime.exec анализирует все аргументы путем определения пространства или, возможно, более подходящим образом cmd анализирует каждый аргумент.

Так,

cmd /c .\bin\Tomcat7.exe //US//Tomcat7 --Jvm="C:\Program Files\Apache Tomcat 7\jre\bin\server\jvm.dll" 

является получение Jvm аргумент разбивается на аргументы "C: \ Program", "Files \ Apache", "Tomcat ..... который вызывает не быть в состоянии интерпретировать аргументы. цитирование аргументы, как представляется, игнорируются, а также.

есть ли способ либо сделать ссылку на Jvm аргумента уважаться ЦМДОМ или использовать указанный каталог в Runtime.exec?

Спасибо за считывание.

ответ

0

эффективным решением является использование окна коротких имен:

заменить Program Files на PROGRA~1 (использование DIR /X C:\ | find "Program"), чтобы увидеть, если это правильное название

заменить Apache Tomcat 7 на APACHE~1 (или что-то возвращаемый DIR /X C:\PROGRA~1 | find "Apache")

Ваша команда очень вероятно

cmd /c .\bin\Tomcat7.exe //US//Tomcat7 --Jvm=C:\PROGRA~1\APACHE~1\jre\bin\server\jvm.dll 

н о более пространства: проблема решена

EDIT:

неподтвержденным, но вы можете попробовать этот аромат Exec вместо:

public Process exec(String command, String[] envp, File dir); 

так:

exec("cmd /c .\bin\Tomcat7.exe //US//Tomcat7 --Jvm=\"C:\Program Files\Apache Tomcat 7\jre\bin\server\jvm.dll\"",null,new File(directory)) 

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

+0

Я определенно рассматривал это, но это оказалось слишком хрупким, поскольку каталог мог быть ... E:/Мой каталог/какое-то место глупо/... – Tyrel

+0

затем проверить мое последнее редактирование (конец сообщения) –

+0

Это похоже, работает. Первоначально я переключился с использования runtime.exec (команда String) как «cmd/c» C: \ Program Files \ Apache Tomcat 7 \ bin \ Tomcat7.exe "// US // Tomcat7 --Jvm = \" C : \ Program Files \ Apache Tomcat 7 \ jre \ bin \ server \ jvm.dll \ "" не смог оценить первый аргумент/каталог, поэтому я переключился на использование exec (String [], env, File) – Tyrel

Смежные вопросы