Mon Jul 04 07:05:31 2022: Request 143646 was acted upon. Transaction: Ticket created by torsten.wer...@assyst.de Queue: PAR-Packer Subject: Problem using Win32::TieRegistry in script packed with pp on Windows Broken in: (no value) Severity: (no value) Owner: Nobody Requestors: torsten.wer...@assyst.de Status: new Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=143646 >
Hi, at first thank you for your work on the packer. It's very usefull. There is a problem enumerating registry content in scripts packed with pp. I know it sounds strange. But it is highly reproducible. Here an sample script "regtest.pl": use strict; use Win32::TieRegistry; use Win32API::Registry qw( :ALL ); my $key="HKEY_CURRENT_USER\\Control Panel\\Keyboard"; print "No of members: ",scalar keys %{$Registry->{$key}},"\n"; # will show 0 in packed script foreach my $member (keys %{$Registry->{$key}}) { print "Member: $member\n"; # nothing to be seen in packed script } # the rest is a check that something exists in the registry, Win32::TieRegistry independent my ($key, $uIndex, $name, $nameLength, $type, $data, $dataLength ); die "RegOpenKey: $^E" unless RegOpenKeyEx( HKEY_CURRENT_USER , "Control Panel\\Keyboard", 0, KEY_READ, $key ); my $uIndex=0; my $ok; LOOP: while (1) { $ok=RegEnumValue ( $key, $uIndex, $name, $nameLength, [], $type, $data, $dataLength ); last LOOP unless $ok; print "Read by RegEnumKeyEx: $name = $data\n"; $uIndex++; } RegCloseKey( $key ); Here what I do to show the effect: Z:\Devel>perl regtest.pl No of members: 3 Member: \KeyboardDelay Member: \KeyboardSpeed Member: \InitialKeyboardIndicators Read by RegEnumKeyEx: KeyboardDelay = 1 Read by RegEnumKeyEx: KeyboardSpeed = 31 Read by RegEnumKeyEx: InitialKeyboardIndicators = 0 Z:\Devel>pp -o regtest.exe regtest.pl Z:\Devel>regtest.exe No of members: 0 Read by RegEnumKeyEx: KeyboardDelay = 1 Read by RegEnumKeyEx: KeyboardSpeed = 31 Read by RegEnumKeyEx: InitialKeyboardIndicators = 0 As to be seen, enumeration works in native perl script only. I had a look with procmon too. It is to be seen that the enumeration runs in both cases. The result is missing. I think the enumeration of registry keys and values is quite important, I'm wondering that nobody has seen this before. I use Strawberry perl 5.32,1 MSWin32-x64-multi-thread, pp 0.992 Bye Torsten ---------------------------------------------------------------------- Dr. Ing. Torsten Werner | Product Manager plan.assyst E-Mail: torsten.wer...@assyst.de Assyst GmbH | Max-Planck-Str. 3 | 85609 Aschheim-Dornach Registration / Eintragung beim Amtsgericht München: HRB 180174 Managing Director / Geschäftsführer: Hans Peter Hiemer, Dr. Andreas Seidl www.assyst.de ----------------------------------------------------------------------