无法在java中执行cmd文件

时间:2012-06-12 14:42:19

标签: java processbuilder

我必须执行目录xyz.cmd中的E:/abc文件。因此,要执行的文件的绝对路径为E:/abc/xyz.cmd。执行时,文件本身会创建一个新窗口。

我的代码段是: -

String path = “E:\\abc”;
String cmd = path + “\\xyz.cmd”;
ProcessBuilder processBuilder = new ProcessBuilder(cmd);
processBuilder.redirectErrorStream(true);
processBuilder.directory(new File(path));
processBuilder.start();

这不起作用,但没有错误或异常。但是cmd文件工作正常,可以使用explorer或cmd-prompt从其目录手动执行。 尝试使用不同版本的jdk,但徒劳无功。我正在使用Windows 7操作系统。我也没有看到进程在任务管理器中运行。 什么出了什么问题?相同的代码在具有相同配置的不同计算机中工作正常。

=== EDIT ==== 这可能是一个安全问题吗?像执行程序的用户没有足够的权限来执行文件?

1 个答案:

答案 0 :(得分:2)

您需要调用cmd.exe作为进程构建器String的第一部分,以便命令处理器能够调用.cmd文件。对于.bat文件或任何OS类型命令也是如此。例如,请查看here

另外,请看这里:When Runtime.exec() won't

修改
你说:

  

请理解,这不是在processbuilder中不添加cmd.exe的问题;因为以前的命令,cmd.exe会得到照顾。

到目前为止,我认为您的帖子中没有任何文档证明这是真的,而且我的所有经验都强烈建议不这样做。

你还说:

  

这可能是一个安全问题吗?像执行程序的用户那样没有足够的priveleges来执行文件?

除非您捕获并显示进程的输入流,否则无法知道。实际上,如果您不捕获此流,则可能会阻止您的进程运行。我们通常也必须捕获错误流,但你已将它们与

组合在一起
processBuilder.redirectErrorStream(true)

请阅读我的“当Runtime.exec()不会”链接上面有关捕获流的必要性的更多信息。