Наиболее вероятная причина различия заключается в том, что формат файла исполняемых файлов Windows не зарегистрирован в обработчике binfmt_misc
в ядре, что позволяет ядру прозрачно выполнять различные программы через помощников. Ошибка Syntax error: "(" unexpected
обычно означает, что файл был передан /bin/sh
, а не вину.
Итак, проверьте, смонтирована ли файловая система binfmt_misc (большинство современных Linux делают это автоматически):
grep binfmt_misc /proc/self/mountinfo
должен возвращать некоторые записи (может быть autofs, может быть binfmt_misc зависит от дистрибутива).
если это не так, смонтировать его:
sudo mount -t binfmt_misc binfmt_misc /proc/sys/fs/binfmt_misc
Вы можете узнать, что зарегистрировано, посмотрев содержимое этого каталога. Чтобы зарегистрироваться для запуска DOS исполняемых файлов с вином, необходимо зарегистрировать его:
echo ':DOSWin:M::MZ::/usr/bin/wine:' | sudo tee /proc/sys/fs/binfmt_misc/register
После регистрации выполнение двоичного файла должно происходить прозрачно, и оно должно выполняться через ProcessBuilder.
Настройка этого для сервера во время загрузки оставлена пользователю в качестве упражнения.
Если вы хотите пропустить весь этот беспорядок, вы можете изменить выполнение с des.exe
на wine
с первым аргументом des.exe
.