in reply to Reading subkeys from registry
ok gepebril69 I have not a solution as your code produces useful results for me and for others too(more about it below). But I have some suggestions.
Preamble: you said special access flags to make it happen on 64bit platforms and this ringed a bell in my mind: is this monk another victim of the evil microsoft redirection? you should already know, as you are using special access flags, but to fully understand read this post from me.
Filesystem redirection has two, equally evil, brothers: Registry redirection and COM object model. See what they say about Registry redirection.
Now that you know you are walking onmobile sands quicksand i can suggest to start with a little clean new code, instead of the code presented by you (even if it runs). In fact you are querying for unistallable programs and you know that your OS segregate 32bit from 64bit ones (with the funny WoW64 name..).
So i spoiled your code from unusefull things (delimiters, arrayvalues, the call of Dumper.. but also the dump af all keys) and i add just a little code to show if the Perl version is 64bit. Most important i removed your Access special keys (more on that below) part {Access=> 0x20019|0x0100} and used the standard flag imported from Win32API::Registry ie use Win32API::Registry qw(KEY_READ); .. Access=>KEY_READ()
So the code became:
Now i understood why you used thees special keys (described here) because KEY_WOW64_64KEY (0x0100) is not exported by Win32API::Registry. and you used it diractly in junction with KEY_READ (0x20019).
using {Access=> 0x20019|0x0100} access (uncomment it in the above example and comment the Access=>KEY_READ()) give theese results: The description of the access mask tell us:KEY_WOW64_32KEY (0x0200) Indicates that an application on 64-bit Windows should operate on the 32-bit registry view... But is not true! is the opposite! UPDATE last senteces is wrong: see my last reply.
If you see zero key returned on your machine, with your original code, it means to me that you have no 64bit applications uninstallable on your system (the opposite of what i read from ms docs!! in fact in the 77 subkey i find programs that resides in the 64bit program folder "C:\Program Files").Or using other words: if you use your special access flag you are probably looking for the wrong thing. try just reading them and be aware of the possible redirection occuring when you play the three card game with that OS.
HtH and let us know
L*
Preamble: you said special access flags to make it happen on 64bit platforms and this ringed a bell in my mind: is this monk another victim of the evil microsoft redirection? you should already know, as you are using special access flags, but to fully understand read this post from me.
Filesystem redirection has two, equally evil, brothers: Registry redirection and COM object model. See what they say about Registry redirection.
Now that you know you are walking on
So i spoiled your code from unusefull things (delimiters, arrayvalues, the call of Dumper.. but also the dump af all keys) and i add just a little code to show if the Perl version is 64bit. Most important i removed your Access special keys (more on that below) part {Access=> 0x20019|0x0100} and used the standard flag imported from Win32API::Registry ie use Win32API::Registry qw(KEY_READ); .. Access=>KEY_READ()
So the code became:
With my little Perl version test program i got theese results:use strict; use warnings; use Win32API::Registry qw(KEY_READ); use Config; print "\n\nPerl $Config{archname}\n"; use Win32::TieRegistry(Delimiter=>"/"); my $uninstall=$Registry->Open( "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Unin +stall", { Access=>KEY_READ() #Access=> 0x20019|0x0100 } ); print "Number of subkeys found: ".scalar(keys %$uninstall)."\n";
As the perl is 64bit the keys found are 77 on my workstation. 353 otherwise.| | | Perl MSWin32-x86-multi-thread | Number of subkeys found: 353 [OK] C:\ulisse\strawberry\perl\bin\perl.exe | | | Perl MSWin32-x86-multi-thread-64int | Number of subkeys found: 353 [OK] C:\ulisse\straw5.20-32b\perl\bin\perl.exe | | | Perl MSWin32-x64-multi-thread | Number of subkeys found: 77 <---- + look here [OK] C:\ulisse\straw64\perl\bin\perl.exe | | | Perl MSWin32-x86-multi-thread-64int | Number of subkeys found: 353 [OK] C:\ulisse\strP5.22-32\perl\bin\perl.exe
Now i understood why you used thees special keys (described here) because KEY_WOW64_64KEY (0x0100) is not exported by Win32API::Registry. and you used it diractly in junction with KEY_READ (0x20019).
using {Access=> 0x20019|0x0100} access (uncomment it in the above example and comment the Access=>KEY_READ()) give theese results:
As you can see all Perls see only 77 unistallable programs.| | | Perl MSWin32-x86-multi-thread | Number of subkeys found: 77 [OK] C:\ulisse\strawberry\perl\bin\perl.exe | | | Perl MSWin32-x86-multi-thread-64int | Number of subkeys found: 77 [OK] C:\ulisse\straw5.20-32b\perl\bin\perl.exe | | | Perl MSWin32-x64-multi-thread | Number of subkeys found: 77 [OK] C:\ulisse\straw64\perl\bin\perl.exe | | | Perl MSWin32-x86-multi-thread-64int | Number of subkeys found: 77 [OK] C:\ulisse\strP5.22-32\perl\bin\perl.exe
If you see zero key returned on your machine, with your original code, it means to me that you have no 64bit applications uninstallable on your system (the opposite of what i read from ms docs!! in fact in the 77 subkey i find programs that resides in the 64bit program folder "C:\Program Files").Or using other words: if you use your special access flag you are probably looking for the wrong thing. try just reading them and be aware of the possible redirection occuring when you play the three card game with that OS.
HtH and let us know
L*
There are no rules, there are no thumbs..
Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.
Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^2: Reading subkeys from registry -- evil registry redirection?
by gepebril69 (Scribe) on Nov 13, 2015 at 18:52 UTC | |
by Discipulus (Canon) on Nov 16, 2015 at 08:45 UTC | |
by gepebril69 (Scribe) on Nov 17, 2015 at 13:27 UTC | |
by gepebril69 (Scribe) on Nov 20, 2015 at 13:35 UTC |
In Section
Seekers of Perl Wisdom