首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >了解ProcessBuilder

了解ProcessBuilder
EN

Stack Overflow用户
提问于 2012-09-06 04:43:43
回答 1查看 762关注 0票数 2

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

我最后一次使用这个电话:

代码语言:javascript
运行
复制
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注册表中提取值,请执行以下操作。

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-07 02:03:41

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

代码必须修复:

代码语言:javascript
运行
复制
cmd[0] = "\\Windows\\System32\\reg";

或者:

代码语言:javascript
运行
复制
cmd[0] = "\\Windows\\SysWOW64\\reg";
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12289451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档