ローカルのWindowsマシン(64ビット)にインストールされているODBCドライバを表示する必要があるjava SWTアプリケーションで作業しています。私はそれを行うregクエリステートメントを考え出した。32ビットのJavaから64ビットのWindowsコマンドを実行
reg query "HKLM\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources" /f *
このコマンドをコマンドプロンプトで実行すると、予想される出力が得られます。しかし、32ビットjavaから同じコマンドを実行すると、regクエリは失敗します。ここにサンプルコードがあります。
String cmd = "reg query \"HKEY_LOCAL_MACHINE\\SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources\" /f *";
System.out.println(cmd);
Process p = Runtime.getRuntime().exec(cmd);
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
line = null;
BufferedReader err = new BufferedReader(new InputStreamReader(p.getErrorStream()));
while ((line = err.readLine()) != null) {
System.out.println(line);
}
私は窓が64ビットレジストリと64ビットのreg.exeを使用するために私の32ビットのJavaを妨げているレジストリのリダイレクトを持っていることがわかったいくつか読め出力
ERROR: The system was unable to find the specified registry key or value.
。
system32フォルダ内の64ビットreg.exeのパスをハードコーディングしようとしましたが、まだ失敗しています。
String cmd = "C:\\Windows\\System32\\reg.exe query \"HKLM\\SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources\" /f *";
とにかくこの問題を解決してください。
ありがとうございます。
に私のREQクエリステートメントを更新しました。 Javaから直接実行される場合、引用符は残され、結果の引数は存在しない(および無効な)キーを指定します。 –
@ジムガリソンその引用符のためではない。私は引用符を取り除くことによってそれをチェックし、再度それを走らせた – kamesh
私はあなたの提案のように引用符を削除することによって試みた。 'String cmd =" reg query HKLM \\ SOFTWARE \\ ODBC \\ ODBC.INI \\ ODBCデータソース/ f * ";'今回の出力は構文が正しくありません。私はHKLMツリーから別の値にアクセスするのにうんざりしていました。 '原因:根本的な原因は、javaとwindowsのアーキテクチャの違いのように見えます。 – kamesh