gepebril69 has asked for the wisdom of the Perl Monks concerning the following question:

Hi there,

For a project I need to track all installed third party software updates. All windows updates (KB....) can easily be obtained through CLI, not the third party updates.

Through scaning through registry with regedit I found that all patches can be found in values of HKEY_CLASSES_ROOT\Installer\Patches\xxxxxxxxx\SourceList (PackageName)

I can read all subkeys and values if I know the XXXXX values. But I don't, and I can't manage how.....

This code retrieved the values of a particular subfolder XXXXXXXXXXXXX:

use Win32::Registry; $p = "Installer\\Patches\\18337E8B1B905984CA0D4383B5F025D6\\SourceList +\\Media"; $main::HKEY_CLASSES_ROOT->Open($p, $CurrVer) || die "Open: $!"; $CurrVer->GetValues(\%vals); # get sub keys and value -hash ref foreach $k (keys %vals) { $key = $vals{$k}; print "$$key[0] = $$key[2]\n"; # see below for explanation }

Win32::TieRegistry, the better version of Win32::Registry only gave undef values...... That seems to lie in 64 bits registry

Has somebody a clue how to get all XXXXXXXX values?

Replies are listed 'Best First'.
Re: Scanning through Windows registry
by SimonPratt (Friar) on Jan 09, 2015 at 17:41 UTC

    I'll just leave this here...

    use 5.16.2; use Win32::TieRegistry; my $baseKey = $Registry->{'HKEY_CLASSES_ROOT\Installer\Patches'}; foreach my $subKey ( $baseKey->SubKeyNames ) { say $subKey; }

      @Simon,

      Thanks, running this, results in:

      Can't call method "SubKeyNames" on an undefined value at E:\test4.pl line 4. :(

        It's like no path or key exists with TieRegistery

        I have the same issue as here: http://stackoverflow.com/questions/678015/why-cant-win32tieregistry-list-subkeys

        That is why I gave up on TieRegistry