ruby注册表检查

ruby注册表检查,ruby,windows,registry,Ruby,Windows,Registry,我有以下代码段,我正试图使用它来验证注册表项(操作系统是Windows 2008R2或Win7) 当我执行以下2个命令时,输出是预期的(在我的情况下,返回false): 当我表演 puts(value_exists?("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WindowsUpdate\\Auto Update\\",'RebootRequired')) 我得到以下错误 C:/Ruby187/lib/ruby/1.8/win32/regis

我有以下代码段,我正试图使用它来验证注册表项(操作系统是Windows 2008R2或Win7)

当我执行以下2个命令时,输出是预期的(在我的情况下,返回false):

当我表演

puts(value_exists?("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WindowsUpdate\\Auto Update\\",'RebootRequired')) 
我得到以下错误

C:/Ruby187/lib/ruby/1.8/win32/registry.rb:528:in `open': The system cannot find the file specified. (Win32::Registry::Error)
        from C:/Ruby187/lib/ruby/1.8/win32/registry.rb:608:in `open'
        from ./reg2.rb:7:in `value_exists?'
        from ./reg2.rb:21
我真的不知道该怎么做才能让这一切顺利进行。我怀疑这可能与使用x64的系统有关,并且它未能在正确的位置找到密钥。但我不确定我需要做什么来补救这一点


提前谢谢你的帮助

我无法在ruby 1.9.2 P286上复制您的问题,即使密钥不存在,也会按预期返回三个false


您可以在\lib\ruby\\win32下比较源代码以找出更改,然后自行更新。

您的问题是注册表中不存在以下路径
SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WindowsUpdate\\Auto update\\
。你用regedit检查过了吗

您应该将代码修改为-

def value_exists?(path,key)
    reg_type = Win32::Registry::KEY_READ 
    begin
        Win32::Registry::HKEY_LOCAL_MACHINE.open(path, reg_type) {|reg| regkey = reg[key]}
    rescue
        false
    end
end
我想出来了-

注册表::项读取| 0x100


这就解决了问题!我猜你们没有在x64上测试?

你们也可以尝试使用
ENV
。它充当散列,并允许您执行散列函数

ENV.has_key?("CUSTOM_PATH") #=> Should return TRUE or FALSE
并列出所有可用的密钥

ENV.each do |k, v|
    puts "#{k} is related to #{v}"
end
我希望这有帮助


是的!这使得它可以在Windowsx64上与ruby 1.9.3(x86)一起工作,谢谢!如果这对您有效,请确保将其标记为答案。此处管道的含义是什么?这可能是一个愚蠢的问题,但您是否
需要“win32/registry”
ENV.has_key?("CUSTOM_PATH") #=> Should return TRUE or FALSE
ENV.each do |k, v|
    puts "#{k} is related to #{v}"
end