ProcessBuilder执行自定义可执行文件

时间:2011-09-28 09:10:37

标签: java windows processbuilder

好的,我已经尝试了十几种不同的方法但没有成功。我想执行自定义exe并获取输​​出。它从命令提示符运行正常。我得到“目录”工作正常,但不是custom.exe。这是代码:

  List<String> command = new ArrayList<String>();
  command.add("cmd");          // Even removed these two lines
  command.add("/c");           // aka hail mary coding.
  //command.add("dir");
  command.add("custom.exe");   // even tried "c://custom.exe"

  String line;
  Process p = new ProcessBuilder(command).start();
  BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
  while ((line = input.readLine()) != null) {
    System.out.println(line);
  }

我根本没有输出。如果我将它放在批处理文件中,我会得到输出。我觉得它与%PATH%有关。回到它......

编辑 - &GT;事实证明,这个自定义exe的输出会出错,所以要看看发生了什么,我有代码:

  List<String> command = new ArrayList<String>();
  command.add(System.getenv("ProgramFiles(x86)") + "\\mydir\\custom.exe";

  String line;
  ProcessBuilder pb = new ProcessBuilder(command);
  pb.redirectErrorStream(true);
  Process p = pb.start();
  BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
  while ((line = input.readLine()) != null) {
    System.out.println(line);
  }

它的效果就像一个热门的诅咒。 :)

1 个答案:

答案 0 :(得分:2)

您不需要行

command.add("cmd");
command.add("/c");

只有批处理文件才需要这样做。我宁愿指定可执行文件的完整路径。

也许输出是在stderr上?尝试将p.getInputStream()替换为p.getErrorStream()