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)的原因