java - 了解 ProcessBuilder

标签 java system-calls processbuilder

我第二次遇到了使用 ProcessBuilder 从系统调用中提取值的问题。

我上次使用通话时间:

try {
    String[] cmd = new String[5];
    cmd[0] = "reg";
    cmd[1] = "query";
    cmd[2] = key;
    cmd[3] = "/v";
    cmd[4] = name;

    ProcessBuilder pb = new ProcessBuilder(cmd);
    Process process = pb.start();
    StreamReader reader = new StreamReader(process.getInputStream());

    reader.start();
    int exitValue = process.waitFor();
    reader.join();
    if (exitValue != 0) {
        return null;
    }

    String result = reader.getResult();
    int p = result.indexOf(REGSTR_TOKEN);

    if (p == -1) {
        return null;
    }

    return result.substring(p + REGSTR_TOKEN.length()).trim();
} catch (Exception e) {
    return null;
}

从 Windows 注册表中提取值。

但是该值总是返回错误,这与我从命令行进行调用时发生的情况不同。可以看出环境变量不一样。

有什么问题吗?我应该设置任何环境变量吗?

最佳答案

问题是Java运行时发现错误reg.exe 。作为命令行执行时,执行为\Windows\System32\reg.exe ,当在调用我的 java 类的进程内运行时,调用 \Windows\SysWOW64\reg.exe 。每个reg.exe指向不同的注册表。这就是错误。

必须修复代码:

cmd[0] = "\\Windows\\System32\\reg";

或者:

cmd[0] = "\\Windows\\SysWOW64\\reg";

关于java - 了解 ProcessBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12289451/

相关文章:

Java检查图像是否具有透明度

c - 为什么 getpagesize() 返回一个 int?

java - 使用 ProcessBuilder 调用多个命令

Java ProcessBuilder : Resultant Process Hangs

python - 在python中mlock一个变量

java - processbuilder 创建 jar 时失败

java - HttpURLConnection 连接重置错误处理

java - 在 MySQL 中保留 java LocalDate

java - 测试了一些 LWJGL OpenGL,不会生成盒子。我应该怎么办?

calloc/malloc 并读取奇怪的行为?