Joachim прав, но его ответ недостаточен, когда ваш процесс ожидает унифицированных аргументов, как показано ниже:
myProcess.exe /myParameter="my value"
Как видно stefan, ProcessBuilder увидит пробелы в вашем аргументе и обернет его в кавычки, например это:
myProcess.exe "/myParameter="my value""
Разрыв значений параметров, так как рекомендует Joachim, приведет к пробелу между /myparameter=
и "my value"
, который не будет работать для этого типа параметра:
myProcess.exe /myParameter= "my value"
Согласно Sun, в их бесконечной мудрости это не ошибка, а двойные кавычки могут быть экранированы для достижения желаемого поведения.
] Чтобы окончательно ответить на вопрос Стефана, это альтернатива, которая ДОЛЖНА работать, если процесс, который вы вызываете, делает все правильно:
ArrayList test = new ArrayList();
test.add("\"C:\\Program Files\\USBDeview\\USBDeview.exe\"");
test.add("/enable \\\"My USB Device\\\"");
Это должно дать вам команду "C:\Program Files\USBDeview\USBDeview.exe" "/enable \"My USB Device\""
, которая может выполнять обмануть; YMMV.