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