[英]runtime.getruntime().exec(“wscript.exe macro.vbs”) doesn't work on windows server 2008
我在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”)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.