不能 运行 exe 文件使用 ProcessBuilder 取决于计算机
Can't run exe file using ProcessBuilder depending of computer
我在 Java 中使用 Process 和 ProcessBuilder
时遇到问题。
我有一行代码如下所示:
Process process = new ProcessBuilder("des.exe", String... params);
它在我的个人电脑上运行良好,但在我的测试服务器上运行不正常,我不明白为什么。
ErrorStream 给我这个:
des.exe: MZ����@���: not found
des.exe: Syntax error: "(" unexpected
两台计算机都在 Ubuntu 16.04.4 LTS 和 java 1.8.
知道它可能来自哪里吗?
造成差异的最可能原因是windows可执行文件的文件格式没有在内核中的binfmt_misc
处理程序中注册,这使得内核可以透明地通过帮助程序执行各种程序.错误 Syntax error: "(" unexpected
通常意味着文件已移交给 /bin/sh
,而不是 wine。
因此,检查 binfmt_misc 文件系统是否已挂载(大多数现代 linux 会自动执行此操作):
grep binfmt_misc /proc/self/mountinfo
应该 return 一些条目(可能是 autofs,可能 binfmt_misc 取决于发行版)。
如果没有则安装它:
sudo mount -t binfmt_misc binfmt_misc /proc/sys/fs/binfmt_misc
看这个目录的内容就知道注册了什么。要使用 wine 注册 运行 dos 可执行文件,您需要注册它:
echo ':DOSWin:M::MZ::/usr/bin/wine:' | sudo tee /proc/sys/fs/binfmt_misc/register
注册后,二进制文件的执行应该是透明的,并且应该通过 ProcessBuilder 成功。
在启动时为服务器配置此项留给用户作为练习。
如果你想跳过这整个混乱,那么你可以将执行从 des.exe
更改为 wine
,第一个参数为 des.exe
。
我在 Java 中使用 Process 和 ProcessBuilder
时遇到问题。
我有一行代码如下所示:
Process process = new ProcessBuilder("des.exe", String... params);
它在我的个人电脑上运行良好,但在我的测试服务器上运行不正常,我不明白为什么。
ErrorStream 给我这个:
des.exe: MZ����@���: not found
des.exe: Syntax error: "(" unexpected
两台计算机都在 Ubuntu 16.04.4 LTS 和 java 1.8.
知道它可能来自哪里吗?
造成差异的最可能原因是windows可执行文件的文件格式没有在内核中的binfmt_misc
处理程序中注册,这使得内核可以透明地通过帮助程序执行各种程序.错误 Syntax error: "(" unexpected
通常意味着文件已移交给 /bin/sh
,而不是 wine。
因此,检查 binfmt_misc 文件系统是否已挂载(大多数现代 linux 会自动执行此操作):
grep binfmt_misc /proc/self/mountinfo
应该 return 一些条目(可能是 autofs,可能 binfmt_misc 取决于发行版)。
如果没有则安装它:
sudo mount -t binfmt_misc binfmt_misc /proc/sys/fs/binfmt_misc
看这个目录的内容就知道注册了什么。要使用 wine 注册 运行 dos 可执行文件,您需要注册它:
echo ':DOSWin:M::MZ::/usr/bin/wine:' | sudo tee /proc/sys/fs/binfmt_misc/register
注册后,二进制文件的执行应该是透明的,并且应该通过 ProcessBuilder 成功。
在启动时为服务器配置此项留给用户作为练习。
如果你想跳过这整个混乱,那么你可以将执行从 des.exe
更改为 wine
,第一个参数为 des.exe
。