java runtime.exec cmd / c解析引用的参数
我正在尝试 runtime.exec(String[],null, new File(directory))
使用前两个参数“ cmd”和“ /
c”运行。
我正在尝试为要运行的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"
)以查看其名称是否正确
替换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可能(未经检查)尝试添加引用不需要的地方,从而破坏了命令行。
以上是 java runtime.exec cmd / c解析引用的参数 的全部内容, 来源链接: utcz.com/qa/420816.html