java runtime.exec cmd /c 解析引用参数
java runtime.exec cmd /c parsing quoted arguments
我正在尝试 运行
runtime.exec(String[],null, new File(directory))
前两个参数是 "cmd" 和“/c”。
我正在尝试将 tomcat 的 java 版本指定为 运行。似乎 cmd /c 参数导致 runtime.exec 通过 space 描述来解析所有参数,或者更恰当地说 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 试图在不需要的地方添加引号,从而破坏您的命令行。
我正在尝试 运行
runtime.exec(String[],null, new File(directory))
前两个参数是 "cmd" 和“/c”。
我正在尝试将 tomcat 的 java 版本指定为 运行。似乎 cmd /c 参数导致 runtime.exec 通过 space 描述来解析所有参数,或者更恰当地说 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 试图在不需要的地方添加引号,从而破坏您的命令行。