0
我正在處理需要顯示安裝在本地Windows機器(64位)中的ODBC驅動程序的java SWT應用程序。我想出了一個可以做到這一點的註冊查詢語句。從32位運行64位Windows命令java
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);
}
輸出
ERROR: The system was unable to find the specified registry key or value.
在一些閱讀中,我發現窗戶有註冊表重定向這是防止我的32位Java使用64位註冊表和64位REG.EXE。
我試圖硬編碼system32文件夾中的64位reg.exe的路徑,但它仍然失敗。
String cmd = "C:\\Windows\\System32\\reg.exe query \"HKLM\\SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources\" /f *";
無論如何要解決這個問題。
在此先感謝。
從命令行'cmd.exe'殼去掉不必要的行情運行。當直接從Java運行時,引號被留下並且結果參數指定一個不存在的(和無效的)密鑰。 –
@JimGarrison它不是因爲引號。我通過刪除引號再次運行它來檢查它 – kamesh
我嘗試刪除您建議的引號。 'String cmd =「reg query HKLM \\ SOFTWARE \\ ODBC \\ ODBC.INI \\ ODBC Data Sources/f *」;'這次的輸出語法不正確。我厭倦了從HKLM樹中獲得另一個價值,它工作。 'String cmd1 =「reg query \」HKLM \\ HARDWARE \\ DESCRIPTION \\ System \\ CentralProcessor \\ 0 \「/ v ProcessorNameString」;' 根本原因看起來像是java和windows之間的體系結構差異。 – kamesh