ProcessBuilder不适用于参数

时间:2018-04-04 08:46:44

标签: java command-line processbuilder

我正在编写一个程序,它在表格中用一个用户的计算机名称点击一个单元格的功能之一,在命令行中,调用外部程序远程连接到计算机。该命令如下所示:

"C:\Program Files\Vnc\MegaVNC\vncviewer.exe" /user vncadmin /password xxxxxx /server comp-01

" C:\ Program Files \ Vnc \ MegaVNC \ vncviewer.exe"是文件的位置," / user vncadmin / password xxxxxx / server comp-01"论点。请注意,参数是在没有引号的情况下编写的。 当您从命令行调用此命令时,一切正常。

我的代码使用ProcessBuilder:

ProcessBuilder pb = new ProcessBuilder("C:/Program Files/Vnc/MegaVNC/vncviewer.exe ",  "/user vncadmin /password xxxxxx /server comp-01").start();

但它不起作用。如果删除参数,则会打开被调用的程序。但是当使用参数初始化时,程序本身会挂起参数并且连接崩溃。 我尝试了以下方法:

ProcessBuilder pb = new ProcessBuilder("C:/Program Files/Vnc/MegaVNC/vncviewer.exe", "/user vncadmin ", "/password xxxxxx ", "/server comp-01").start();

它也不起作用。我猜这个问题是在斜杠或空格的错误解释编译器中。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您应该将所有命令行参数作为单独的参数传递给流程构建器。否则,它们在内部被引用,因此被被调用程序解释为单个参数。

ProcessBuilder pb = new ProcessBuilder("C:/Program Files/Vnc/MegaVNC/vncviewer.exe", "/user", "vncadmin", "/password", "xxxxxx", "/server", "comp-01").start();

我创建了一个愚蠢的批处理" C:/Temp/test.bat":

@echo off
set argCount=0
for %%x in (%*) do (
   set /A argCount+=1
   echo %%x
)
echo Number of processed arguments: %argCount%

使用new ProcessBuilder("C:/Temp/test.bat", "a b").start();,我得到了结果:

"a b"
Number of processed arguments: 1

使用new ProcessBuilder("C:/Temp/test.bat", "a", "b").start();,我得到了结果:

a
b
Number of processed arguments: 2