2

ProcessBuilderを使用してシステムコールから値を抽出する際に2度目の問題が発生しました。

前回電話を使用したとき:

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レジストリから値を抽出します。

ただし、コマンドラインから呼び出しを行った場合とは異なり、値は常にエラーを返します。環境変数が異なることがわかります。

どうしたの?環境変数を設定する必要がありますか?

4

1 に答える 1

2

問題は、Java ランタイムが間違ったreg.exe. コマンドラインとして実行する\Windows\System32\reg.exeと、 my java class calls を呼び出すプロセス内で実行すると、として実行されました\Windows\SysWOW64\reg.exe。それぞれreg.exeが異なるレジストリ テーブルを指します。それがバグでした。

コードを修正する必要があります。

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

または:

cmd[0] = "\\Windows\\SysWOW64\\reg";
于 2012-09-06T18:03:41.080 に答える