ProcessBuilder 不适用于参数
ProcessBuilder does not work with argument
我正在写一个程序,它的功能之一是点击table中带有用户计算机名称的单元格,在命令行中调用外部程序进行连接远程到电脑。该命令如下所示:
"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();
也不行。我猜问题出在斜线或空格的错误解释编译器中。有什么想法吗?
您应该将所有命令行参数作为单独的参数传递给流程构建器。否则,它们在内部被引用,因此被调用程序解释为单个参数。
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
我正在写一个程序,它的功能之一是点击table中带有用户计算机名称的单元格,在命令行中调用外部程序进行连接远程到电脑。该命令如下所示:
"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();
也不行。我猜问题出在斜线或空格的错误解释编译器中。有什么想法吗?
您应该将所有命令行参数作为单独的参数传递给流程构建器。否则,它们在内部被引用,因此被调用程序解释为单个参数。
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