Eine .NET-DLL kann sowohl als 32-Bit- als auch als 64-Bit-Version auf einer Maschine mit einem x64-Prozessor ausgeführt werden. Ich muss zur Laufzeit feststellen, unter welcher Bitness meine Anwendung läuft.
Momentan habe ich etwas wie System.IntPtr.Size == 8
gemacht, aber das scheint ein hässlicher Hack zu sein. Gibt es einen "richtigen" Weg, dies zu bestimmen?
In .NET 4 besitzt die Klasse System.Environment
zwei statische Eigenschaften: Is64BitOperatingSystem
und Is64BitProcess
. In früheren .NET-Versionen müssen Sie den IntPtr
size-Ansatz verwenden.
Vor .NET 4 wurde vorgeschlagen, die Größe eines IntPtr
zu verwenden (4 für 32 Bit und 8 für 64 Bit). Dies gibt Ihnen jedoch nicht die Bissigkeit der Maschine - gibt Ihnen die Bissigkeit der CLR , die verwendet wird.
Das ist ein wichtiger Unterschied, wenn Sie innerhalb eines 32-Bit-Prozesses wie Anwendungs-Add-Ins arbeiten. Ich habe einen Blog-Post über das Finden der Maschinen Bitness basierend auf WMI:
Beachten Sie jedoch, dass ich immer noch nicht sicher bin, ob dies die aktuelle OS-Bitness (wie sie den Prozessor verwendet) wirklich darstellt.
Für die überwiegende Mehrheit der Fälle genügt bei normaler Kompilierung (AnyCPU), die eine eigene App ausführt, IntPtr
.
In .NET 4 gibt es jetzt, wie andere gesagt haben, Environment.Is64BitProcess
und
Environment.Is64BitOperatingSystem
.