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