Я работаю над Java SWT-приложением, которое должно показать драйверы ODBC, установленные на локальной машине Windows (64 бит). Я придумал инструкцию reg query, которая сделает это.Запуск 64-битной оконной команды из 32-битного 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.
Я пытался жестко установить путь для 64-битного reg.exe в папке system32, но он все еще не работает.
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 Источники данных/f * ";' Выход на этот раз является неправильным синтаксисом. Я устал от доступа к другому значению из дерева HKLM, и он сработал. 'String cmd1 =" reg query \ "HKLM \\ HARDWARE \\ ОПИСАНИЕ \\ System \\ CentralProcessor \\ 0 \"/v ProcessorNameString ";' Основная причина выглядит как разница в архитектуре между java и windows. – kamesh