63 votes

Détecter si le courant est la version de Windows 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.

Est-il une DLL de Windows appel ou (encore mieux) une variable d'environnement qui permettrait de donner de l'information pour Windows XP et Windows Vista?

Une solution possible

Je vois que Wikipédia affirme que la version 64 bits de Windows XP et Windows Vista ont une unique variable d'environnement: %ProgramW6432%, donc je suppose que ce serait vide sur la 32 bits de Windows.

Cette variable points de Program Files répertoire qui stocke toutes les programme installé de Windows et d'autres. La valeur par défaut de langue anglaise systèmes est - C:\Program Files. Dans les éditions 64 bits de Windows (XP, 2003, Vista), il y a aussi %ProgramFiles(x86)% qui par défaut est C:\Program Files (x86) et %ProgramW6432% qui par défaut est C:\Program Files. L' %ProgramFiles% dépend lui-même de savoir si le processus qui demande la variable d'environnement est lui-même 32-bit ou 64-bit (ceci est causé par Windows sur Windows 64 bits de redirection).

63voto

Dror Harari Points 786

Pour vérifier la version 64 bits de Windows dans une fenêtre de commande, j'utilise le modèle suivant:

test.chauve-souris:

@echo off
if defined ProgramFiles(x86) (
    @echo yes
    @echo Some 64-bit work
) else (
    @echo no
    @echo Some 32-bit work
)

ProgramFiles(x86) est une variable d'environnement définie automatiquement par cmd.exe (32-bit et 64-bit versions) sur Windows 64 bits uniquement les machines.

20voto

Blorgbeard Points 38991

Voici Delphi 7 code pour vérifier si votre 32 bits programme est exécuté 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 32-bit 
  // versions of kernel32.dll (eg. Windows 2000) don't know about it.
  // See "IsWow64Process", http://msdn.microsoft.com/en-us/library/ms684139.aspx
  Result := False;
  hKernel32 := LoadLibrary('kernel32.dll');
  if hKernel32 = 0 then RaiseLastOSError;
  try
    @IsWow64Process := GetProcAddress(hkernel32, 'IsWow64Process');
    if Assigned(IsWow64Process) then begin
      if (IsWow64Process(GetCurrentProcess, IsWow64)) then begin
        Result := IsWow64;
      end
      else RaiseLastOSError;
    end;
  finally
    FreeLibrary(hKernel32);
  end;
end;

13voto

Clay Nichols Points 4252

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

Testé pour la Variable d'Environnement Windows: ProgramW6432

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

13voto

Leif Gruenwoldt Points 3583

À partir d'un script de commandes:

IF PROCESSOR_ARCHITECTURE == x86 AND
   PROCESSOR_ARCHITEW6432 NOT DEFINED THEN
   // OS is 32bit
ELSE
   // OS is 64bit
END IF

À l'aide de Windows API:

if (GetSystemWow64Directory(Directory, MaxDirectory) > 0) 
   // OS is 64bit
else
   // OS is 32bit

Sources:

  1. HOWTO: Processus de détection du nombre de bits
  2. GetSystemWow64Directory fonction

8voto

Jason Points 385

Si vous pouvez faire des appels de l'API, essayez d'utiliser GetProcAddress / GetModuleHandle pour vérifier l'existence de IsWow64Process qui n'est présent que dans l'OS de Windows qui ont les versions 64 bits.

Vous pouvez également essayer les ProgramFiles(x86) variable d'environnement utilisée dans Vista/2008 pour la compatibilité ascendante, mais je ne suis pas sûr à 100% sur XP 64 ou 2003-64.

Bonne chance!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X