Ruby - как читать ключи реестра для 32-битных и 64-битных приложений из 32-битного ruby - PullRequest
0 голосов
/ 06 июня 2018

Я использую ruby ​​32 bit в своем приложении.Я использую "win32 / registry" для чтения ключей реестра.

Когда я использую

reg = Win32::Registry::HKEY_LOCAL_MACHINE.open('SOFTWARE\app_path')
reg_typ, reg_val = reg.read('somekey')

Он по умолчанию читает в пути

HKEY_LOCAL_MACHINE \ SOFTWARE \WOW6432Node \ app_path

.

Теперь некоторые из приложений являются 64-битными, и я хочу проверить наличие

HKEY_LOCAL_MACHINE \ SOFTWARE \ app_path

ч.Но по умолчанию он всегда пытается найти под «WOW6432Node»

Любое предложение о том, чего мне не хватает и как я могу прочитать реестр для 32- и 64-разрядных приложений из ruby?

1 Ответ

0 голосов
/ 06 июня 2018

Очевидно, win32/registry не определяет KEY_WOW64_{32,64}KEY флаги , которые используются для этого.Но поскольку Ruby позволяет повторно открывать классы и модули, вы можете легко добавить их самостоятельно:

module Win32::Registry::Constants
  KEY_WOW64_64KEY = 0x0100
  KEY_WOW64_32KEY = 0x0200
end

Чтобы прочитать 64-битный ключ:

reg = Win32::Registry::HKEY_LOCAL_MACHINE.open('SOFTWARE\app_path',
        Win32::Registry::KEY_READ | Win32::Registry::KEY_WOW64_64KEY)

Чтобы прочитать 32-битовый ключ:

reg = Win32::Registry::HKEY_LOCAL_MACHINE.open('SOFTWARE\app_path',
        Win32::Registry::KEY_READ | Win32::Registry::KEY_WOW64_32KEY)

Вы можете открыть запрос функции для этого на Ruby's bug tracker (или я могу сделать это для вас, если вы предпочитаете).

...