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 said:
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