簡體   English   中英

從32位Java運行64位Windows命令

[英]Run 64 bit windows command from 32 bit java

我正在使用Java SWT應用程序,該應用程序需要顯示安裝在本地Windows計算機(64位)中的ODBC驅動程序。 我想出了一個reg查詢語句,它將做到這一點。

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.

一經閱讀,我發現Windows具有注冊表重定向功能,這阻止了我的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 *";

無論如何要解決此問題。

提前致謝。

謝謝你們的幫助。 我找到了解決方案。 我必須使用sysnative文件夾才能從32位應用程序訪問64位工具。

所以我更新了我的要求查詢語句

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM