我必须执行目录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 ==== 这可能是一个安全问题吗?像执行程序的用户没有足够的权限来执行文件?
答案 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()不会”链接上面有关捕获流的必要性的更多信息。