From: Shea Martin Date: 2007-03-22T09:05:51+09:00 Subject: Re: traverse windows registry Yeah, I notices that it would be dead simple to make it work. Just add TypeError to the rescue clause. But I like to write portable code that doesn't depend on changing standard libs. I would say that this is a design flaw though, of the win32/registry.rb code. It makes it unusable for iteration, as it is inevitable that one will come across a REG_NONE at some point. I ended up just copying the each_value function, and making my own global version with took a registry entry as a parameter. ~S Jeremy wrote: > 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 >> >