Вы вызываете программу и ее аргументы за один проход, что эффективно помещает всю строку в среду обработки (в надежде на лучшее).
В системах Windows операционная система требует обработкиисполняемый файл и аргументы по-разному, и размещение их всех в одной строке просто требует от вас выбора идеальной строки, которую среда (из которых есть две, о которых я знаю) может быть повторно проанализирована в список аргументов.Лучшее решение состоит в том, чтобы использовать
Runtime.exec(new String[] {"vboxmanage", "setextradata", "Test Machine", "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/HostPort", "2222"});
, что соответствует Runtime's
public Process exec(String[] cmdarray)
throws IOException
В лучшем случае, с помощью метода одной строки вы в конечном итоге узнаете, как намекнуть и выйтиаргументы, чтобы они не рассматривались как часть имени исполняемого файла, но тогда вы столкнетесь с новой проблемой: они передаются всем как один параметр в исполняемый файл.Как только вы исправите это в зависимости от окружения, вы либо обнаружите, что ваши кавычки не удаляются из параметров (что приводит к таким параметрам, как «2222»), либо синтаксический анализ аргументов в Window собирается сначала проанализировать пробельные символы (приводит к таким параметрам, как («Тест»). Это не имеет смысла, поэтому доступно более одного exec
метода.