我正在尝试 runtime.exec(String[],null, new File(directory))使用前两个参数“ cmd”和“ / c”运行。
runtime.exec(String[],null, new File(directory))
我正在尝试为要运行的tomcat指定Java版本。似乎cmd / c参数导致runtime.exec通过空间定界来解析所有参数,或者更合适的是cmd可以解析出每个参数。
所以,
cmd /c .\bin\Tomcat7.exe //US//Tomcat7 --Jvm="C:\Program Files\Apache Tomcat 7\jre\bin\server\jvm.dll"
正在将jvm参数分解为参数“ C:\ Program”,“ Files \ Apache”,“ Tomcat .....”,这导致无法解释参数。对参数的引用也似乎被忽略了。
有没有办法让cmd尊重jvm参数,或者利用runtime.exec中的指定目录?
谢谢阅读。
一个有效的解决方法是使用Windows短名称:
替换Program Files为PROGRA~1(使用DIR /X C:\ | find "Program")以查看其名称是否正确
Program Files
PROGRA~1
DIR /X C:\ | find "Program"
替换Apache Tomcat 7为APACHE~1(或返回的任何内容DIR /X C:\PROGRA~1 | find "Apache")
Apache Tomcat 7
APACHE~1
DIR /X C:\PROGRA~1 | find "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可能(未经检查)尝试添加引用不需要的地方,从而破坏了命令行。