From looking at the source the read bit should already be in a 
begin/rescue so it might be worth checking you have the latest version 
of ruby and the win32 stuff? I think that the problem is actually in the 
read method of registry.rb, doesn't seem to handle REG_NONE. You could 
change this method to make it work. Here's the original:

    def read(name, *rtype)
      type, data = API.QueryValue(@hkey, name)
      unless rtype.empty? or rtype.include?(type)
        raise TypeError, "Type mismatch (expect #{rtype.inspect} but #{type} present)"
      end
      case type
      when REG_SZ, REG_EXPAND_SZ
        [ type, data.chop ]
      when REG_MULTI_SZ
        [ type, data.split(/\0/) ]
      when REG_BINARY
        [ type, data ]
      when REG_DWORD
        [ type, API.unpackdw(data) ]
      when REG_DWORD_BIG_ENDIAN
        [ type, data.unpack('N')[0] ]
      when REG_QWORD
        [ type, API.unpackqw(data) ]
      else
        raise TypeError, "Type #{type} is not supported."
      end
    end


Shea Martin wrote:
> Shea Martin wrote:
>> Is there an example of traversing the window registry?  I can't seem 
>> to find any documentation on Win32::Registry.  The ruby install came 
>> with some docs for Windows::Registry, but that seems to be a 
>> different animal...
>>
>> THanks,
>> ~S
>
>
> I have traversal code working. Just simple recursion.  But I am having 
> trouble looping over values.  An exception is thrown whenever a value 
> of type REG_NONE is found.  This prevents me from iterating over other 
> values, due to the exception.  Even if I rescue the exception, I am 
> still kicked out of the each_value loop.
>
> The problem is that each_value does a read, and read throws the 
> exception if the type is REG_NONE.  see win32/registry.rb line 633.
>
> Is there anyway around this?
>
> Thanks,
> ~S
>