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?
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%
Sie können dies auch von einer Umgebungsvariablen PROCESSOR_ARCHITEW6432
erhalten. Siehe diesen Artikel für weitere Informationen.
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.
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:
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"
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
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.
Entschuldigen Sie sich für die Grabung. Die Umgebungsvariable der Prozessorarchitektur ist jedoch über Powershell ...
$env:PROCESSOR_ARCHITECTURE
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