it-swarm.com.de

Warum% processor_architecture% immer x86 anstelle von AMD64 zurückgibt

Ich versuche, die Umgebungsvariable abzurufen, um zu ermitteln, ob das System 32 oder 64 Bit hat ..__ Auf 64-Bit-Servern gibt die Umgebungsvariable %processor_architecture% jedoch x86 statt AMD64 zurück.

Hat jemand eine Ahnung davon?

25
alice7

Möglicherweise erhalten Sie die falsche Umgebungsvariable. Wenn Ihre Anwendung eine 32-Bit-Anwendung ist, die auf einem 64-Bit-Betriebssystem ausgeführt wird, gibt die Prozessversion dieser Umgebungsvariablen x86 zurück. Wenn Sie die Architektur des Computers suchen möchten, können Sie sie aus dem folgenden Registrierungseintrag entnehmen:

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

Wenn Sie .NET verwenden, können Sie diesen Aufruf verwenden, um es zu erhalten:

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

Von der Kommandozeile aus können Sie folgendes versuchen:

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

Es gibt sogar eine einfachere Lösung mit cmd :

ECHO %PROCESSOR_ARCHITECTURE%
48
Gerald

Sie können dies auch von einer Umgebungsvariablen PROCESSOR_ARCHITEW6432 erhalten. Siehe diesen Artikel für weitere Informationen.

10
Patrick Cuff

Führen Sie tatsächlich eine 64-Bit-Version von Windows aus? Wenn Sie 32-Bit-Windows auf einer 64-Bit-fähigen CPU ausführen, wird weiterhin x86 angezeigt.

8
bobince

Angenommen, 64-Bit-PC mit 64-Bit-Windows-Installation.

%processor_architecture% liefert nur x86 , wenn der Wert in 32-Bit-Programmen abgerufen wird. In 64-Bit-Programmen wird korrekt zurückgegeben - AMD64 .

Beispiel: echo %processor_architecture% ausführen von:

  • 32bit Total Commander
  • 64bit Explorer
4
SkyRaT

ZUVERLÄSSIGE LÖSUNG:

Methode 1: 
(Zwei-Schritt-Validierung mit PROCESSOR_ARCHITECTURE und 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"
)

Methode 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"

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

3
T.Todua

AMD64 ist eine CPU-Marke, die auf der x86 -Architektur basiert. x86-64 genauer die 64-Bit-Erweiterung von x86.

Dies bezieht sich auch auf die Antwort von Bobince.

Dieser Knowledge Base-Artikel zeigt, wie Sie feststellen, ob Ihr System 32-Bit oder 64-Bit ist

3
Dan McGrath

Ich denke, ein Teil des Grunds ist, dass es so ist, dass die x86-64-Architektur 32-Bit-Programme zulassen muss, um sie (soweit wie möglich) mit einer 32-Bit-Umgebung zu behandeln und sicherzustellen, dass 32-Bit-Programme vorhanden sind Ich glaube nicht, dass es nur 64-Bit ist (wie die Itanium-Architektur). 

Dies macht es jedoch sehr frustrierend für Leute, die auf die Unterschiede zwischen der x86-64-Architektur und der 32-Bit-Architektur unter Windows zugreifen müssen.

1
John Thomas

Entschuldigen Sie sich für die Grabung. Die Umgebungsvariable der Prozessorarchitektur ist jedoch über Powershell ... 

$env:PROCESSOR_ARCHITECTURE
1
Eddie B

Ich habe auf meinem Win7HB x64-System gefunden:

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