Ruby - 如何从 32 位 ruby 读取 32 位和 64 位应用程序的注册表项

Ruby - how to read registry keys for 32 bit and 64 bit applications from 32 bit ruby

我在我的应用程序中使用 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 位应用程序的注册表的任何建议?

显然 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 上打开一个功能请求(或者如果您愿意,我可以为您完成)。