Win32 :: TieRegistry在Windows 7 8 10上是64位

时间:2016-06-14 08:31:22

标签: perl registry

我们有一个perl脚本根据Windows注册表内容编写一个文件。 需要为32和64注册表配置单元执行该脚本。

使用此命令" C:\ stdperl \ bin \ perl.exe scriptname.pl"我们处理32位注册表配置单元, 使用此命令" C:\ stdperl64 \ bin \ perl.exe scriptname.pl"我们处理64位注册表配置单元。

我们有: - 这是为MSWin32-x86-multi-thread构建的perl,v5.8.7 - 这是为MSWin32-x64-multi-thread

构建的perl,v5.8.9

受限制的测试用例是:

use strict;
use warnings;
use Win32::TieRegistry( ArrayValues=>0, Delimiter=>"/" );
use Config;

my ($chiave, $regKey, $key)="";

$chiave='HKEY_LOCAL_MACHINE/SOFTWARE/ODBC/ODBCINST.INI';

$regKey = $Registry->Open($chiave, {Access=> 0x20019}); 
foreach $key (keys %$regKey){
    print"$key: " . $regKey->{"$key"} . "\n";
};

在Windows 7/8/10上使用perl 64位执行上述代码时不起作用。 在所有Windows版本上使用perl 32位执行时工作正常,并且在使用Windows Server 2012,Windows 2003 Windows 2008的64系统上正常工作。

为什么?!

这个脚本非常复杂,陈旧,没有文档,是一种没有人想要的脚本,触摸"或"重写"所以任何光线都会受到很多赞赏。

我们没有收到任何错误。

当我们使用32位perl运行脚本时,我们得到以下内容:

C:\>x:\stdperl\bin\perl 160609_t05.pl
Aster ODBC Driver/: Win32::TieRegistry=HASH(0x53b61a4)
Microsoft Access Driver (*.mdb)/: Win32::TieRegistry=HASH(0x53b61ec)
...
omissis
....
Oracle in OraClient12c_32/: Win32::TieRegistry=HASH(0x53b627c)
SQLite3 ODBC Driver/: Win32::TieRegistry=HASH(0x53b621c)

当我使用64位perl运行脚本时,我没有任何条目。

C:\>x:\stdperl64\bin\perl 160609_t05.pl

C:\>

在HKEY_LOCAL_MACHINE / SOFTWARE / ODBC / ODBCINST.INI注册表下有ODBC驱动程序规范,32和64 hive注册表中有条目。

1 个答案:

答案 0 :(得分:0)

使用更新版本的ActiveState perl,问题不会发生。

侨 乔瓦尼