java - runtime.getruntime().exec ("wscript.exe macro.vbs") 在 Windows Server 2008 上不起作用

标签 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 + "" + 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/

相关文章:

java - 二维数组复制(JAVA)

Java:在嵌入式 Tomcat 上测试 Web 应用程序(Tomcat 无法启动)

java - 使用 IntelliJ 运行 tomcat - 无法启动服务器

java - 本地主机上的服务器 Tomcat v7.0 服务器无法在 45 秒内启动。如果服务器需要更多时间,

C++ 传递未初始化的变量

java - 我需要什么混合模式才能通过在图像上绘制透明图像来使图像更透明?

java - 每 x 秒执行一次代码

objective-c - 消息转发链

excel - 每十行增加一个计数器

java - maven 没有下载我添加的任何依赖项