Определить, является ли текущая версия Windows 32-битной или 64-битной - PullRequest
61 голосов
/ 02 марта 2009

Верьте или нет, мой установщик настолько стар, что у него нет возможности определять 64-разрядную версию Windows.

Есть ли в Windows вызов DLL или (что еще лучше) переменная среды, которая выдала бы эту информацию для Windows XP и Windows Vista?

Одно из возможных решений

Я вижу, что Википедия утверждает, что 64-разрядная версия Windows XP и Windows Vista имеет уникальную переменную среды: %ProgramW6432%, поэтому я предполагаю, что она будет пустой в 32-разрядной Windows.

Эта переменная указывает на каталог Program Files, в котором хранятся все установленные программы Windows и другие. По умолчанию в англоязычных системах используется C:\Program Files. В 64-разрядных выпусках Windows (XP, 2003, Vista) также есть %ProgramFiles(x86)%, по умолчанию C:\Program Files (x86) и %ProgramW6432%, по умолчанию C:\Program Files. Сам %ProgramFiles% зависит от того, является ли процесс, запрашивающий переменную среды, самим 32-разрядным или 64-разрядным (это вызвано 64-разрядным перенаправлением Windows-on-Windows).

Ответы [ 22 ]

0 голосов
/ 04 апреля 2013

Проверьте реестр на наличие HKLM \ SOFTWARE \ Wow6432Node - Если он есть, система 64-битная - 32-разрядный, в противном случае.

0 голосов
/ 20 января 2012

Я знаю, что это древний, но вот что я использую для обнаружения Win764

On Error Resume Next

Set objWSHShell = CreateObject("WScript.Shell")

strWinVer = objWSHShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\BuildLabEx")

If len(strWinVer) > 0 Then
    arrWinVer = Split(strWinVer,".")
    strWinVer = arrWinVer(2)
End If

Select Case strWinVer
Case "x86fre"
strWinVer = "Win7"
Case "amd64fre"
    strWinVer = "Win7 64-bit"
Case Else
    objWSHShell.Popup("OS Not Recognized")
    WScript.Quit
End Select
...