【问题标题】:Why can't Win32::TieRegistry list subkeys?为什么 Win32::TieRegistry 不能列出子键?
【发布时间】:2009-03-24 15:46:27
【问题描述】:

使用 Cygwin Perl v5.8.8 和 Win32::TieRegistry 0.26。

我们可以为 HKEY_CURRENT_USER 获得一个绑定的哈希对象:

$ perl -e '
my %RegHash;
use Win32::TieRegistry( TiedHash => \%RegHash );
use Data::Dumper;
my $Key = $RegHash{"HKEY_CURRENT_USER"};
print Dumper $Key;'
$VAR1 = bless( {}, 'Win32::TieRegistry' );

这适用于子键:

$ perl -e '
my %RegHash;
use Win32::TieRegistry( TiedHash => \%RegHash );
use Data::Dumper;
my $Key = $RegHash{"HKEY_CURRENT_USER\\Software"};
print Dumper $Key;'
$VAR1 = bless( {}, 'Win32::TieRegistry' );

我们可以打印密钥的信息:

$ perl -e '
my %RegHash;
use Win32::TieRegistry( TiedHash => \%RegHash );
use Data::Dumper;
my $Key = $RegHash{"HKEY_CURRENT_USER\\Software"};
print Dumper $Key->Information;'
$VAR1 = 'CntSubKeys';
$VAR2 = 48;
$VAR3 = 'MaxSubClassLen';
$VAR4 = 21;
...

但是文档暗示我们可以简单地通过将子键视为哈希来列出子键:

$ perl -e '
my %RegHash;
use Win32::TieRegistry( TiedHash => \%RegHash );
use Data::Dumper;
my $Key = $RegHash{"HKEY_CURRENT_USER\\Software"};
print Dumper keys %$Key; '

但是数组是空的。是坏了还是我做错了什么?还有其他列出子键的方法吗?

这也不起作用:

$ perl -e '
my %RegHash;
use Win32::TieRegistry( TiedHash => \%RegHash );
use Data::Dumper;
my $Key = $RegHash{"HKEY_CURRENT_USER\\Software"};
print Dumper $Key->SubKeyNames;'
Can't use an undefined value as an ARRAY reference at
/usr/lib/perl5/vendor_perl/5.8/cygwin/Win32/TieRegistry.pm line 720.

【问题讨论】:

    标签: perl winapi registry tie


    【解决方案1】:

    使用您的代码:

    my %RegHash;
    use Win32::TieRegistry( TiedHash => \%RegHash );
    use Data::Dumper;
    my $Key = $RegHash{"HKEY_CURRENT_USER\\Software"};
    print Dumper keys %$Key;
    

    我在我的机器上得到了这个结果(WinXP,ActiveState Perl v5.10.0,Win32-TieRegistry 0.25):

    $VAR1 = 'Adobe\\';
    ...
    $VAR101 = 'Classes\\';
    $VAR102 = '\\';
    

    这就是我从您的第二个代码示例中得到的:

    $VAR1 = 'Adobe';
    ...
    $VAR101 = 'Classes';
    

    因此,您的两个代码示例都可以正常工作,至少在 ActiveState Perl 和 Windows XP 上是这样。

    编辑:这看起来像是一个更普遍的问题/错误:

    【讨论】:

    • 我在 cygwin 上使用 perl 5.10.1 和 TieRegistry v0.25 遇到了同样的问题
    猜你喜欢
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-01
    • 1970-01-01
    • 2023-02-25
    • 2019-03-30
    相关资源
    最近更新 更多