java - 无法在java中执行cmd文件

标签 java processbuilder

我必须执行目录E:/abc 中的xyz.cmd 文件。所以要执行的文件的绝对路径是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 文件工作正常,可以使用资源管理器或 cmd-prompt 从其目录手动执行它。 尝试过使用不同版本的jdk,但没有成功。我使用的是 Windows 7 操作系统。我也没有在任务管理器中看到该进程正在运行。 知道出了什么问题吗?相同的代码在具有相同配置的不同计算机上运行良好。

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

最佳答案

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

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

编辑
您声明:

please understand, this is not the problem of not adding cmd.exe in the processbuilder; because of the previous commands, cmd.exe will be taken care.

到目前为止,我在您的帖子中没有看到任何文档表明这是真的,而且我的所有经验强烈表明事实并非如此。

您还声明:

Can this be a security issue? Something like the user executing the program is not having enough priveleges to execute a file?

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

processBuilder.redirectErrorStream(true)

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

关于java - 无法在java中执行cmd文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10999018/

相关文章:

Java:空时停止输入

java - 如何在数据表中绑定(bind)两个类

java - pg_dump ProcessBuilder 中的参数太多

java - 多次使用 agrep.exe 的 Java ProcessBuilder

java - 通过序列化保存我的对象或创建 XML 文件

java - 如何将字节数组从 Android 设备发送到 servlet

java - 在 Java 中将 double[][] 获取到 MATLAB 矩阵的最快方法是什么?

java - 如何在JAVA中向进程发送ctrl+c信号

java - Web 服务及其在实践中的使用

java - 如何从java代码添加环境变量