2016-07-13 17 views
0

ローカルの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 *"; 

とにかくこの問題を解決してください。

ありがとうございます。

+0

に私のREQクエリステートメントを更新しました。 Javaから直接実行される場合、引用符は残され、結果の引数は存在しない(および無効な)キーを指定します。 –

+0

@ジムガリソンその引用符のためではない。私は引用符を取り除くことによってそれをチェックし、再度それを走らせた – kamesh

+0

私はあなたの提案のように引用符を削除することによって試みた。 'String cmd =" reg query HKLM \\ SOFTWARE \\ ODBC \\ ODBC.INI \\ ODBCデータソース/ f * ";'今回の出力は構文が正しくありません。私はHKLMツリーから別の値にアクセスするのにうんざりしていました。 '原因:根本的な原因は、javaとwindowsのアーキテクチャの違いのように見えます。 – kamesh

答えて

1

助けてくれてありがとう。私は解決策を見つけた。 32ビットアプリケーションから64ビットツールにアクセスするには、sysnativeフォルダを使用する必要があります。

`cmd.exe`シェルが不要な引用符を取り除き、コマンドラインから実行した場合ので、私はこの

String cmd = "C:\\Windows\\Sysnative\\reg.exe query \"HKLM\\SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources\" /f *"; 

出力

HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources 
jbb REG_SZ IBM Integration (9.0.0.1) - DataDirect Technologies 7.0 64-BIT Oracle Wire Protocol 
関連する問題