java - 进程和退出代码

标签 java batch-file process exe processbuilder

我想从我的 Java 应用程序运行一个 exe 程序。我尝试使用此代码。 我运行批处理文件,批处理文件运行 exe。

try {    
    String command = "C:\\tryfile\\Runprogram.bat";
    //  ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", command);
    ProcessBuilder pb = new ProcessBuilder(command);
    pb.redirectErrorStream(true);
    Process p = pb.start();

    InputStream is = p.getInputStream();
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);
    String line;

    while ((line = br.readLine()) != null) {
        System.out.println(line);
    }

    int excode = p.waitFor();
    System.out.println(excode + " asfasf");

    p.destroy();    
} catch (Exception e) {
    e.printStackTrace();
}

该exe运行良好,并且执行了我想要的操作。(它使用bcp从csv文件插入到数据库)。没有任何问题。

但是waitfor方法返回2147483647。 它是什么?我对此一无所知。我知道如果 exe 运行并完成且没有任何错误,它通常会返回 0。但我的 exe 返回 2147483647。

有什么想法吗?

我的bat文件在这里:

C:\tryfile\myprogram.exe

最佳答案

您正在获取 BAT 的退出代码,而不是 EXE 的返回代码。但是您没有在 BAT 中指定退出代码,因此您会收到垃圾。

我手头没有 Windows 盒子,但类似的东西应该可以工作

C:\tryfile\myprogram.exe
EXIT /B %ERRORLEVEL%

检查Batch files - Errorlevels

关于java - 进程和退出代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31872203/

相关文章:

java - 使用外部和本地库运行 jar 文件

postgresql - 使用批处理脚本将管道分隔的 csv 转换为制表符分隔

process - 为什么要自动化构建?

java - 在另一个类的 JFrame 上显示 JPanel

batch-file - 在 windows bat 文件中设置 JAVA_HOME 不起作用

java - 为什么在带有 Java 8 日期的 Jackson 的 ObjectMapper 中使用 dateFormat 时不从 JSON 中排除毫秒?

c - Linux在c程序执行过程中更改pgrp(进程组)

启动进程时 Java Android ping IOException "Too many files open"

java - 顶点 : pass initial data to verticle on it deployment

Java 8 Stream API 查找与属性值匹配的唯一对象