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

标签 java tomcat cmd runtime.exec

我想跑 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 解析引用参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39044114/

相关文章:

java - 如何将 OO Perl 转换为 Java?

java - 获取客户端静态IP地址

java - kgefec : fatal error 0 kgepop: no error frame to pop to for error 21503 on tomcat startup

javascript - 如何复制 Node/Electron 中的图像文件并将其作为文件粘贴到 Windows 中的另一个目录?

使用命令行按日期搜索

python - subprocess.Popen() 的每个实例都有自己的外壳吗?

Java ArrayList 添加具有相同 Id 的值

java - StringBuilder 适合复合结构(如 Map<String、List<String>>)的大小

java - Tomcat集群新手

tomcat - 从 Web 应用程序调用线程是否安全