Using Perl, how can I determine whether my program is running on 32 bit Windows or 64 bit Windows?
Is there any API available?
I can think of a couple of options..
Check the PE_HEADER of some windows file (eg: c:\windows\explorer.exe
) - maybe I can use the details in How can I test a windows dll to determine if it is 32bit or 64bit?
Check for the existence of c:\program files(x86)
- if it exists then it is a 64 bit OS. Else it is a 32 bit windows OS.
Is there any good way of doing this? Any API available in Perl?
Sys::Info looks promising:
#!/usr/bin/perl
use strict; use warnings;
use Sys::Info;
my $info = Sys::Info->new;
my $cpu = $info->device('CPU');
printf "%s (%s bit)\n", scalar $cpu->identify, $cpu->bitness;
my $os = $info->os;
printf "%s (%s bit)\n", $os->name(long => 1), $os->bitness;
Output:
C:\Temp> t Genuine Intel(R) CPU T2300 @ 1.66GHz (64 bit) Windows XP Service Pack 3 build 2600 (32 bit)
Note that it incorrectly identifies my laptop's CPU as being 64 bit (see Intel® Core™ Duo Processor T2300—bug report filed).
Perhaps you can just check some environment variables:
See HOWTO: Detect Process Bitness.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With