web-dev-qa-db-fra.com

Pourquoi% processor_architecture% renvoie toujours x86 au lieu de AMD64

J'essaie de récupérer la variable d'environnement pour détecter si le système est en 32 ou 64 bits . Mais sur un serveur 64 bits, la variable d'environnement %processor_architecture% renvoie x86 au lieu de AMD64.

Quelqu'un at-il une idée à ce sujet?

25
alice7

Vous obtenez peut-être la mauvaise variable d'environnement. Si votre application est une application 32 bits s'exécutant sur un système d'exploitation 64 bits, la version de processus de cette variable d'environnement renverra x86. Si vous souhaitez trouver l'architecture de la machine, vous pouvez la récupérer à partir de l'entrée de registre suivante:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment\PROCESSOR_ARCHITECTURE

Ou si vous utilisez .NET, vous pouvez utiliser cet appel pour l'obtenir:

string Arch = System.Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE", 
    EnvironmentVariableTarget.Machine);

En ligne de commande, vous pouvez essayer ceci:

reg query "HKLM\System\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE

Il existe même une solution plus simple utilisant cmd :

ECHO %PROCESSOR_ARCHITECTURE%
48
Gerald

Vous pouvez également l'obtenir à partir d'une variable d'environnement, PROCESSOR_ARCHITEW6432. Voir this article pour plus d'informations.

10
Patrick Cuff

Exécutez-vous réellement une version 64 bits de Windows? Si vous exécutez Windows 32 bits sur un processeur compatible 64 bits, vous obtiendrez toujours x86.

8
bobince

En supposant qu'un PC 64 bits avec une installation Windows 64 bits.

%processor_architecture% renvoie x86 uniquement lors de l'obtention de la valeur dans les programmes 32 bits. Dans les programmes 64 bits, il retourne correctement AMD64 .

Exemple: exécutez echo %processor_architecture% à partir de:

  • Commandant total 32bit
  • Explorateur 64bit
4
SkyRaT

LA SOLUTION LA PLUS FIABLE:

Méthode 1: 
(Validation en deux étapes avec PROCESSOR_ARCHITECTURE et PROCESSOR_ARCHITEW6432)

set Arch=x64
if "%PROCESSOR_ARCHITECTURE%" == "x86" ( 
    if not defined PROCESSOR_ARCHITEW6432 set Arch=x86
) 

if "%Arch%" == "x64"    (
    msg * "yessss"
) else  (
    msg * "noooo"
)

Méthode 2:

reg Query "HKLM\Hardware\Description\System\CentralProcessor\0" | find /i "x32" > NUL && set OS=32BIT || set OS=64BIT

if %OS%==32BIT echo "YESSS"
if %OS%==64BIT echo "NOOO"

source: https://superuser.com/a/293143/249349

3
T.Todua

AMD64 est une marque de processeur basée sur l’architecture x86. x86-64 plus précisément, qui est l'extension 64 bits de x86.

Ceci concerne également la réponse de bobince.

Cet Article de la base de connaissances vous montre comment déterminer si votre système est 32 bits ou 64 bits.

3
Dan McGrath

Je pense que c'est en partie parce que l'architecture x86-64 doit permettre aux programmes 32 bits de la traiter comme identique (autant que possible) à un environnement 32 bits et de s'assurer que les programmes 32 bits ne pensez pas qu’il s’agit uniquement de 64 bits (comme l’architecture Itanium). 

Cela rend toutefois très frustrant les personnes qui ont besoin d'accéder aux différences entre l'architecture x86-64 et l'architecture 32 bits sous Windows.

1
John Thomas

S'excuser pour la tombe. Cependant, la variable environnementale d'architecture de processeur est accessible via powershell ... 

$env:PROCESSOR_ARCHITECTURE
1
Eddie B

J'ai trouvé sur mon système Win7HB x64:

msgbox wscript.createobject("wscript.Shell").environment("system").item("processor_architecture") ' always "AMD64"

msgbox wscript.createobject("wscript.Shell").environment("process").item("processor_architecture") ' "AMD64" if launched via System32, "x86" if launched via SysWOW64
0
omegastripes