Ruby - 如何从32位ruby

时间:2018-06-06 06:48:15

标签: ruby windows ruby-on-rails-3 registry win32ole

我在我的应用程序中使用ruby 32位。我使用“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”下找到

有关我缺少什么的建议以及如何从ruby读取32位和64位应用程序的注册表?

1 个答案:

答案 0 :(得分:2)

显然win32/registry没有定义用于执行此操作的KEY_WOW64_{32,64}KEY flags。但由于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上打开功能请求(如果您愿意,我可以为您执行此操作)。