0

我必须执行一个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 文件工作正常,可以使用资源管理器或 cmd-prompt 从其目录手动执行。尝试使用不同版本的jdk,但徒劳无功。我正在使用 Windows 7 操作系统。我也没有看到任务管理器中正在运行的进程。知道出了什么问题吗?相同的代码在具有相同配置的不同计算机上运行良好。

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

4

1 回答 1

2

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

另外,请看这里:当 Runtime.exec() 不会

编辑
你状态:

请理解,这不是没有在processbuilder中添加cmd.exe的问题;由于前面的命令, cmd.exe 将得到照顾。

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

你还说:

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

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

processBuilder.redirectErrorStream(true)

请阅读我上面的“When Runtime.exec() won't”链接,了解更多关于捕获流的必要性。

于 2012-06-12T14:48:40.283 回答