【发布时间】:2010-11-29 14:04:12
【问题描述】:
如何让我的 Perl 脚本检测到它是否在 64 位 Windows 机器上运行,即使它是 32 位 perl?
【问题讨论】:
标签: perl winapi registry win64
如何让我的 Perl 脚本检测到它是否在 64 位 Windows 机器上运行,即使它是 32 位 perl?
【问题讨论】:
标签: perl winapi registry win64
见this question。你检查%PROCESSOR_ARCHITECTURE% 环境变量。
【讨论】:
感谢本 S。
来自您链接到的问题中的链接:msdn blog on how to dectect process bitness
产生以下代码: 打印 "WIN64?: $ENV{PROCESSOR_ARCHITECTURE} \n"; 打印 "WIN64?: $ENV{PROCESSOR_ARCHITEW6432} \n";
以及以下输出(xp64 上的 32 位 perl)
WIN64?: x86
WIN64?: AMD64
如果您在 64 位 win 上运行 32 位应用程序,您需要参考 PROCESSOR_ARCHITEW6432。
【讨论】:
if (($ENV{'PROCESSOR_ARCHITECTURE'} eq "AMD64") or
($ENV{'PROCESSOR_ARCHITEW6432'} eq "AMD64")) {
$arch = "win64";
} else {
$arch = "win32";
}
参考: http://blogs.msdn.com/b/david.wang/archive/2006/03/26/howto-detect-process-bitness.aspx
【讨论】:
另一种方法,虽然有点复杂,是检查 Windows API 函数IsWow64Process。在this question 的答案中给出了如何做到这一点的示例(在 Delphi 中)。
【讨论】:
my @CPUIdentifierArray = split ' ', $ENV{PROCESSOR_IDENTIFIER};
my %ArcHash = ('x86' => 32, 'AMD64' => 64, 'Intel64' => 64);
my $Arch = $ArcHash{$CPUIdentifierArray[0]};
返回 32 或 64
【讨论】: