Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java runtime.exec cmd/c解析引用的参数_Java_Tomcat_Cmd_Runtime.exec - Fatal编程技术网

java runtime.exec cmd/c解析引用的参数

java runtime.exec cmd/c解析引用的参数,java,tomcat,cmd,runtime.exec,Java,Tomcat,Cmd,Runtime.exec,我想跑 runtime.exec(字符串[],null,新文件(目录)),前两个参数为“cmd”和“/c” 我正试图指定我的tomcat要运行的java版本。似乎cmd/c参数正在导致runtime.exec通过空间划分来解析所有参数,或者更恰当地说,cmd正在解析每个参数 所以 正在将jvm参数分为参数“C:\Program”、“Files\Apache”、“Tomcat…”,这导致无法解释这些参数。引用这些参数似乎也被忽略 有没有一种方法可以让cmd遵守对jvm参数的引用,或者利用runti

我想跑
runtime.exec(字符串[],null,新文件(目录))
,前两个参数为“cmd”和“/c”

我正试图指定我的tomcat要运行的java版本。似乎cmd/c参数正在导致runtime.exec通过空间划分来解析所有参数,或者更恰当地说,cmd正在解析每个参数

所以

正在将jvm参数分为参数“C:\Program”、“Files\Apache”、“Tomcat…”,这导致无法解释这些参数。引用这些参数似乎也被忽略

有没有一种方法可以让cmd遵守对jvm参数的引用,或者利用runtime.exec中指定的目录


感谢阅读。

一个有效的解决方法是使用windows短名称:

程序文件
替换为
PROGRA~1
(使用
DIR/X C:\\查找“Program”
)以查看其名称是否正确

Apache~1
替换
Apache Tomcat 7
(或者由
DIR/X C:\PROGRA~1 |查找“Apache”
返回的任何内容)

你的命令很可能是

cmd /c .\bin\Tomcat7.exe //US//Tomcat7 --Jvm=C:\PROGRA~1\APACHE~1\jre\bin\server\jvm.dll
没有空间了:问题解决了

编辑:

未经验证,但您可能想尝试这种风格的exec:

public Process exec(String command, String[] envp, File dir);
像这样:

exec("cmd /c .\bin\Tomcat7.exe //US//Tomcat7 --Jvm=\"C:\Program Files\Apache Tomcat 7\jre\bin\server\jvm.dll\"",null,new File(directory))

您当前使用的API必须从参数重建完整的命令行,这些参数不是真正的参数,而是带有空格、引号等的参数组。这是可能的(未选中)API试图在不需要的地方添加引号,从而损坏命令行。

一种有效的解决方法是使用windows短名称:

程序文件
替换为
PROGRA~1
(使用
DIR/X C:\\查找“Program”
)以查看其名称是否正确

Apache~1
替换
Apache Tomcat 7
(或者由
DIR/X C:\PROGRA~1 |查找“Apache”
返回的任何内容)

你的命令很可能是

cmd /c .\bin\Tomcat7.exe //US//Tomcat7 --Jvm=C:\PROGRA~1\APACHE~1\jre\bin\server\jvm.dll
没有空间了:问题解决了

编辑:

未经验证,但您可能想尝试这种风格的exec:

public Process exec(String command, String[] envp, File dir);
像这样:

exec("cmd /c .\bin\Tomcat7.exe //US//Tomcat7 --Jvm=\"C:\Program Files\Apache Tomcat 7\jre\bin\server\jvm.dll\"",null,new File(directory))

您当前使用的API必须从参数重建完整的命令行,这些参数不是真正的参数,而是带有空格、引号等的参数组。这是可能的(未选中)API试图在不需要的地方添加引号,从而破坏了您的命令行。

我确实考虑过这一点,但结果证明这太脆弱了,因为目录可能是…E:/My directory/some place傻乎乎的/…似乎正在工作。最初,我将runtime.exec(String命令)改为“cmd/c”“C:\Program Files\Apache Tomcat 7\bin\Tomcat7.exe”//US//Tomcat7--Jvm=\“C:\Program Files\Apache Tomcat 7\jre\bin\server\Jvm.dll\”无法计算第一个参数/目录,这就是为什么我切换到使用exec(字符串[],env,文件)的原因。我肯定考虑到了这一点,但由于目录可能太脆弱了。。。E:/My directory/some place dully/…似乎正在工作。最初,我从使用runtime.exec(String命令)转换为“cmd/c”c:\Program Files\Apache Tomcat 7\bin\Tomcat7.exe”//US//Tomcat7--Jvm=\“c:\Program Files\Apache Tomcat 7\jre\bin\server\Jvm.dll\”无法计算第一个参数/目录,这就是我转换为使用exec(String[],env,File)的原因