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?
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%
Vous pouvez également l'obtenir à partir d'une variable d'environnement, PROCESSOR_ARCHITEW6432
. Voir this article pour plus d'informations.
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
.
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:
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"
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.
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.
S'excuser pour la tombe. Cependant, la variable environnementale d'architecture de processeur est accessible via powershell ...
$env:PROCESSOR_ARCHITECTURE
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