Détecter si la version actuelle de Windows est 32 bits ou 64 bits

Croyez-le ou non, mon installateur est tellement vieux qu'il n'a pas une option pour détecter la version 64 bits de Windows.

Y a-t-il un appel de la DLL de Win ou (encore mieux) une variable d'environnement qui donnerait cette info pour XP et Vista ?

Une solution possible

Je vois que Wikipédia stipule que la version 64 bits de XP et Vista ont une unique Variable de Env: * % ProgramW6432 % * donc je Devine qui serait vide sur windows 32 bits.

Cette variable pointe vers le répertoire Program Files, qui stocke tous le programme installé de Windows et d'autres. La valeur par défaut sur les systèmes en langue anglaise est C:\Program Files. Dans les éditions 64 bits de Windows (XP, 2003, Vista), il y a aussi des % ProgramFiles(x86) %, qui est par défaut C:\Program Files (x 86) et % ProgramW6432 %, ce qui est par défaut C:\Program Files. Le %ProgramFiles% elle-même dépend de savoir si le processus demandant la variable d'environnement est elle-même 32 bits ou 64 bits (cela est causé par la redirection de Windows-sur-Windows 64-bit).

répondre #1

Partir d'un script de commandes : http://support.microsoft.com/kb/556009

Le lien ci-dessus inclut également des instructions pour cette vérification du Registre:

Pour vérifier si ordinateur exécute 32 ou 64 bits du système d'exploitation Windows, vous pouvez utiliser l'emplacement de Registre suivant :

HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\0

Vous verrez les entrées de Registre suivantes dans le volet droit :

Identificateur REG_SZ x 86 Family 6 Model 14 12 ID de plateforme de progression REG_DWORD 0x00000020(32)

Le plus haut « x 86 » et « 0x00000020(32) » indiquent que la version du système d'exploitation 32 bits.

répondre #2

Faire référence à :

répondre #3

Pour vérifier la version 64 bits de Windows dans une boîte de commande utiliser le modèle suivant :

test.bat :

@echo off
if defined ProgramFiles(x86) (
@echo yes
@echo Some 64-bit work
) else (
@echo no
@echo Some 32-bit work
)
répondre #4

J'ai testé la solution que j'ai suggéré à ma question :

Testé pour la Variable d'environnement Windows : ProgramW6432

Si c'est non vide, alors il est 64 bits Windows.W

répondre #5

Cela a été assez bien déjà répondu, mais puisque la question et la réponse actuelle m'a aidé à trouver ma propre solution, je posterai ici dans l'espoir que quelqu'un d'autre va gagner du temps.

Code Delphi 7 pour vérifier si votre programme 32 bits s'exécute sur un système d'exploitation 64 bits :

function Is64BitOS: Boolean;
type
  TIsWow64Process = function(Handle:THandle; var IsWow64 : BOOL) : BOOL; stdcall;
var
  hKernel32 : Integer;
  IsWow64Process : TIsWow64Process;
  IsWow64 : BOOL;
begin
  // we can check if the operating system is 64-bit by checking whether
  // we are running under Wow64 (we are 32-bit code). We must check if this
  // function is implemented before we call it, because some older versions
  // of kernel32.dll (eg. Windows 2000) don't know about it.
  // see http://msdn.microsoft.com/en-us/library/ms684139%28VS.85%29.aspx
  Result := False;
  hKernel32 := LoadLibrary('kernel32.dll');
  if (hKernel32 = 0) then RaiseLastOSError;
  @IsWow64Process := GetProcAddress(hkernel32, 'IsWow64Process');
  if Assigned(IsWow64Process) then begin
    IsWow64 := False;
    if (IsWow64Process(GetCurrentProcess, IsWow64)) then begin
      Result := IsWow64;
    end
    else RaiseLastOSError;
  end;
  FreeLibrary(hKernel32);
end;
répondre #6

Si vous pouvez faire des appels d'API, essayez d'utiliser GetProcAddress et GetModuleHandle pour vérifier l'existence IsWow64Process , qui n'est présent que dans le système d'exploitation Windows qui ont des versions 64 bits.

Vous pouvez aussi essayer la variable d'environnement ProgramFiles(x86) utilisée dans Vista/2008 vers l'arrière compatibilité, mais je ne suis pas 100 % sûr de 64-XP ou 2003-64.

Bonne Chance!

répondre #7

Je ne sais pas quelle langue que vous utilisez, mais .net a la variable d'environnement : PROCESSOR_ARCHITEW6432 si le système d'exploitation 64 bits.

Si tout ce vous voulez savoir c'est si votre application s'exécute 32 bits ou 64 bits, vous pouvez consulter IntPtr.Size . Il sera 4 s'exécute en mode 32 bits et en 8 s'exécute en mode 64 bits.

répondre #8

J'ai utilisé cela dans un script d'ouverture de session pour détecter les Windows 64 bits

Si « % ProgramW6432 % » == « %ProgramFiles% » goto is64flag

répondre #9

Partir d'un script de traitement par lots :echo %PROCESSOR_ARCHITECTURE%

Voir http://blogs.msdn.com/b/david.wang/archive/2006/03/26/howto-detect-process-bitness.aspx

répondre #10

Pour un script VBScript / code uniligne WMI qui récupère le nombre de bits réels (32 ou 64) de l'OS ou le matériel, regardez http://csi-windows.com/toolkit/csi-getosbits

répondre #11

Je ne sais pas sur quelle version de windows, il existe, mais sur vista plu il s'exécute :

Function Is64Bit As Boolean
Dim x64 As Boolean = System.Environment.Is64BitOperatingSystem
If x64 Then
   Return true
Else
   Return false
End If
End Function
répondre #12

En c# :

public bool Is64bit() {
    return Marshal.SizeOf(typeof(IntPtr)) == 8;
}

Dans VB.Net :

Public Sub Is64bit() As Boolean
    Is64bit = Marshal.SizeOf(GetType(IntPtr)) = 8
End Sub
répondre #13

J'ai testé le fichier batch suivant sur Windows 7 x 64 / x 86 et windows XP x 86 et son amende, mais je n'ai pas essayé XP x 64 encore mais il fonctionnera probablement :

If Defined ProgramW6432 (Do x64 stuff or end if you are aiming for x86) else (Do x86 stuff or end if you are aiming for x64) 
répondre #14

Je sais que c'est ancien mais, voici ce que j'utilise pour détecter les 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

Tags lesen

   
 
logo_banner