Java runtime.getruntime().exec(“wscript.exe macro.vbs”)不';无法在windows server 2008上工作
我在windows server 2008的tomcat 7中部署了一个服务器上的web应用程序。 此web应用程序正在运行以下代码行:Java runtime.getruntime().exec(“wscript.exe macro.vbs”)不';无法在windows server 2008上工作,java,tomcat,runtime,exec,Java,Tomcat,Runtime,Exec,我在windows server 2008的tomcat 7中部署了一个服务器上的web应用程序。 此web应用程序正在运行以下代码行: String path = req.getServletContext().getRealPath("/") + "WEB-INF/vbs/macro.vbs"; int range = 1; int range1 = 1; int status = Runtime.getRuntime().exec("wscript.exe" + path + ""
String path = req.getServletContext().getRealPath("/") + "WEB-INF/vbs/macro.vbs";
int range = 1;
int range1 = 1;
int status = Runtime.getRuntime().exec("wscript.exe" + path + "" + range + "" + range1 + "" + temp.getAbsolutePath() + "" + temp1.getAbsolutePath()).waitFor();
在本地计算机上,执行完全成功。相反,部署到服务器时,应用程序将在exec运行时停止,浏览器将等待响应。
原因可能是什么?我知道这是一个非常古老的问题,但如果有人有类似的问题,仍然值得回答 使用
Runtime.getRuntime().exec()
执行外部程序非常好,但在本例中,参数之间没有空格,这意味着要执行的命令是wscript.exe/WEB-INF/vbs/macro.vbs11…
而不是wscript.exe/WEB-INF/vbs/macro.vbs 1…
Runtime.getRuntime().exec(String)
方法自动将字符串按空格分割,因此另一个潜在问题是命令字符串中的参数可能需要用引号括起来,以防止应用程序错误地解析它们
正确的代码应该是:
int status = Runtime.getRuntime().exec(
"wscript.exe \"" + path + "\" " + range + " " + range1 + "\" " +
temp.getAbsolutePath() + "\" " + temp1.getAbsolutePath() + "\"")
.waitFor();
它在某些服务器上工作,但在其他服务器上不工作,这一事实很可能与部署这些文件的路径有关,这些文件中有或没有空间(例如“C:\Program files”)