Используя Perl, как я могу определить, работает ли моя программа на Windows на 32 бита или Windows на 64 бита?
Действительно ли там какой-либо API доступен?
Я могу думать о нескольких опциях..
Проверьте PE_HEADER некоторого файла окон (например: c:\windows\explorer.exe
) - возможно, я могу использовать детали в том, Как я могу протестировать окна dll, чтобы определить, являются ли это 32 бита или 64 бита?
Проверьте на существование c:\program files(x86)
- если это существует затем, это - ОС на 64 бита. Еще это - окна OS на 32 бита.
Есть ли какой-либо хороший способ сделать это? Какой-либо API, доступный в Perl?
Sys :: Info выглядит многообещающе:
#!/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;
Вывод:
C:\Temp> t Genuine Intel(R) CPU T2300 @ 1.66GHz (64 bit) Windows XP Service Pack 3 build 2600 (32 bit)
Обратите внимание, что неверно идентифицирует процессор моего ноутбука как 64-битный ( см. Процессор Intel® Core ™ Duo T2300 - отчет об ошибке подан).
Переменная PROCESSOR_ARCHITECTURE имеет значение "x86" в 32 битах
.Возможно, вы можете просто проверить некоторые переменные окружающей среды: