есть ли предел команд в ProcessBuilder?Ограничить команды для ProcessBuilder?
У меня есть этот массив команд:
protected String[] cmd = {
"dism /mount-wim /wimfile:boot.wim /index:2 /mountdir:mount",
"dism /image:mount /add-driver:\"driver\" /recurse",
"dism /unmount-wim /mountdir:mount /commit",
"dism /mount-wim /wimfile:install.wim /index:" + formPanel.getOsIndex() + " /mountdir:mount"
};
И это мой ProcessBuilder:
ProcessBuilder pb = new ProcessBuilder(
"cmd.exe", "/c", cmd[0] + " && " + cmd[1] + " && " + cmd[2] + " && " + cmd[3] + " && " + cmd[1] + " && " + cmd[2]
);
Но когда я запускаю его он говорит: '& & было неожиданным в это время'. Когда я меняю processbuilder на это:
ProcessBuilder pb = new ProcessBuilder(
"cmd.exe", "/c", cmd[0] + " && " + cmd[1] + " && " + cmd[2]
);
Тогда он отлично работает.
Так что мой вопрос в основном, только если есть какой-то предел количества команд, которые может пройти один процесс сборки?
Вот весь отрезок моего метода SwingWorker:
@Override
protected Integer doInBackground() {
try {
ProcessBuilder pb = new ProcessBuilder(
"cmd.exe", "/c", cmd[0] + " && " + cmd[1] + " && " + cmd[2] + " && " + cmd[3] + " && " + cmd[1] + " && " + cmd[2]
);
pb.directory(new File(formPanel.workspaceDir.toString()));
pb.redirectErrorStream(true);
Process p = pb.start();
String s;
BufferedReader stdout = new BufferedReader(new InputStreamReader(p.getInputStream()));
while((s = stdout.readLine()) != null && !isCancelled()) {
publish(s);
System.err.println(s);
}
if(!isCancelled()) {
status = p.waitFor();
}
p.getInputStream().close();
p.getOutputStream().close();
p.getErrorStream().close();
p.destroy();
} catch(IOException | InterruptedException ex) {
ex.printStackTrace(System.err);
}
return status;
}
Я начинаю задаваться вопросом, есть ли что-то не так с фактическим кодом, а не командами.
Я думаю, что ограничение с cmd.exe –
Im не уверен, почему он не работает, но я бы лично создавать команды = новый ArrayList <>(); а затем pb.command (команды). И почему cmd.exe в первую очередь? всякий раз, когда вы pb.start(); недостаточно ли запускать команды? также укажите рабочий каталог с pb.directory (новый файл (yourWorkingDir)); – LazerBanana
@Krystian_K - команды команды cmd.exe –