我们有一个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注册表中有条目。
答案 0 :(得分:0)
使用更新版本的ActiveState perl,问题不会发生。
侨 乔瓦尼