Feedback

C# - Windows 64bit Version erkennen

Veröffentlicht von am 3/18/2009
(3 Bewertungen)
Das folgende Skript erkennt ob es sich um ein 32bit oder 64bit Version des Betriebssystem handelt. Laut meinen Untersuchungen wird bei einem 32bit Windows der Processor immer mit x86 im RegestryKey LocalMachine\HARDWARE\DESCRIPTION\System\CentralProcessor\0\Identifier ausgegeben. Bei einem 64bit System wird EM64T ausgegeben. Da ich leider nur ein System mit einem 64bit Betriebssystem zur Verfügung habe weiß ich nicht ob der Wert z.B. bei einem AMD Prozessor eventuell ein anderer ist. Aus diesem Grund prüfe ich nur auf x86 und nehme an das alles andere 64bit ist.

Ab .NET 4.0 kann auch Environment.Is64BitOperatingSystem verwendet werden
string _strOS="";
RegistryKey _rootKey = Registry.LocalMachine;
string _subKey = @"HARDWARE\DESCRIPTION\System\CentralProcessor\0";
RegistryKey _key = _rootKey.OpenSubKey(_subKey);
string _procName = (string)_key.GetValue("Identifier", "");

string[] _values = _procName.Split(new char[] { '' '' }, 2);
if (_values.Length >= 1)
{
  if (string.Compare(_values[0], "x86", true) == 0)
  {
    _strOS += "(32bit)";
  }
  else
  {
    _strOS += "(64bit)";
  }
}

Abgelegt unter 64bit, 32bit, WinodwsXP, Version.

9 Kommentare zum Snippet

MoD schrieb am 3/19/2009:
einfacher
if (IntPtr.Size == 8)
_strOS += "(64bit)";
else
_strOS += "(32bit)";
Schork schrieb am 3/23/2009:
Hallo MoD ich gebe dir recht. Das Problem ist jedoch was machst du wenn deine Anwendung für die x86 Processor kompiliert wurde? Dann sollte auf dem 32bit und 64bit das gleiche Ergebnis ausgegeben werden.
Michael Battermann schrieb am 7/22/2010:
Etwas kürzer geht es so:
string value = Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE", EnvironmentVariableTarget.Machine);
_strOS += value.StartsWith("x86") ? "(32bit)" : "(64bit)";
LHBL2003 schrieb am 4/4/2013:
Hier ist es mal als Statische Klasse ausgearbeitet. Bei dem Beispiel da drüber hatte ich als Ergebnis AMD64 obwohl mein HP ein Intel Core i5 ist.

<a href="http://denishempel.com/?p=1457">http://denishempel.com/?p=1457</a>

Koopakiller schrieb am 4/4/2013:
Ich glaube wenn man nur wissen will ob ein OS 64 Bit ist oder nicht, dann hilft folgende Eigenschaft auch weiter: <a href="http://msdn.microsoft.com/de-de/library/system.environment.is64bitoperatingsystem.aspx">Environment.Is64BitOperatingSystem</a>
Zumindest ab .NET Version 4.0
Sven Schork schrieb am 4/4/2013:
Hallo Koopakiller, super Info jedoch wie du schon geschrieben hast erst interessant ab .NET 4.0.
Noch eine kleine Anmerkung zu den Kommentaren von Michael und LHBL2003 diese Funktionen liefern nicht zuverlässig ob es sich wirklich um ein 32 oder 64bit Betriebssystem da die Umgebungsvariabeln je nach Betriebssystem z.B. XP 64bit zum Teil falsch gesetzt sind. Meiner Erfahrung nach gibt es nur zwei Möglichkeiten die Bitbreite des Betriebssystems in Erfahrung zu bringen und dies ab XP und .NET älter als 4.0:
1. Die Registry (siehe ganz oben)
2. Prozessortype über WMI (sehr langsam)
Koopakiller schrieb am 4/4/2013:
Die besagte Eigenschaft scheint es ganz anders zu machen.
Es wird geprüft ob die <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/ms684139%28v=vs.85%29.aspx">IsWow64Process-Methode</a> in der kernel32.dll definiert ist. Wenn ja wird sie ausgeführt und der Rückgabewert ausgewertet. Ich habe mir den Code mal mit Reflector angeschaut, wobei ich den auch nicht zu 100% verstanden habe, da die Beschreibung in der MSDn etwas widersprüchlich zum Namen ist (für mich).
toxick schrieb am 4/10/2013:
Eine der vielen Eigenschaften aus der Klasse Environment wie z. B. Is64BitOperatingSystem hilft nicht weiter? Environment gibt auch andere Eigenschaften inkl. OS-Version etc. aus.
Sven Schork schrieb am 4/10/2013:
Hallo toxick, leider erst ab .Net 4.0 verfügbar wie bereits weiter oben beschrieben.
 

Logge dich ein, um hier zu kommentieren!