在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上。
知道它可能来自哪里吗?
答案 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
。