无法使用ProcessBuilder运行exe文件,具体取决于计算机

时间:2018-07-04 08:57:27

标签: java processbuilder

在Java中使用Process和PRINT @sql -- select name, [e],[m],[t] from(select name, mark, subject from pivotEx ) f pivot( sum(mark) for subje 时遇到了一个问题。

我有一行这样的代码:

ProcessBuilder

它可以在我的个人计算机上正常运行,但不能在测试服务器上运行,我也不知道为什么。

ErrorStream给我这个:

Process process = new ProcessBuilder("des.exe", String... params);

两台计算机都在具有Java 1.8的Ubuntu 16.04.4 LTS上。

知道它可能来自哪里吗?

1 个答案:

答案 0 :(得分:0)

造成差异的最可能原因是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

您可以通过查看此目录的内容来确定注册的内容。要使用wine注册运行dos可执行文件,您需要注册它:

echo ':DOSWin:M::MZ::/usr/bin/wine:' | sudo tee /proc/sys/fs/binfmt_misc/register

注册后,二进制文件的执行应透明进行,并应通过ProcessBuilder成功执行。

在引导时为服务器配置此操作留给用户练习。

如果您想跳过整个混乱局面,则可以使用第一个参数des.exe将执行从wine更改为des.exe