Wie kann ich feststellen, ob meine Anwendung (in Visual Studio 2008 als beliebige CPU kompiliert ) als 32-Bit- oder 64-Bit-Anwendung ausgeführt wird?
Wie kann ich feststellen, ob meine Anwendung (in Visual Studio 2008 als beliebige CPU kompiliert ) als 32-Bit- oder 64-Bit-Anwendung ausgeführt wird?
Antworten:
if (IntPtr.Size == 8)
{
// 64 bit machine
}
else if (IntPtr.Size == 4)
{
// 32 bit machine
}
Wenn Sie .NET 4.0 verwenden, ist dies ein Einzeiler für den aktuellen Prozess:
Environment.Is64BitProcess
Referenz: Environment.Is64BitProcess-Eigenschaft (MSDN)
Ich habe diesen Code von Martijn Boven gefunden , der den Trick macht:
public static bool Is64BitMode() {
return System.Runtime.InteropServices.Marshal.SizeOf(typeof(IntPtr)) == 8;
}
Dieses Codebeispiel von Microsoft All-In-One Code Framework kann Ihre Frage beantworten:
Erkennen Sie die Prozessausführungsplattform in C # (CSPlatformDetector).
Das CSPlatformDetector-Codebeispiel zeigt die folgenden Aufgaben im Zusammenhang mit der Plattformerkennung:
- Ermitteln Sie den Namen des aktuellen Betriebssystems. (zB "Microsoft Windows 7 Enterprise")
- Ermitteln Sie die Version des aktuellen Betriebssystems. (zB "Microsoft Windows NT 6.1.7600.0")
- Stellen Sie fest, ob das aktuelle Betriebssystem ein 64-Bit-Betriebssystem ist.
- Bestimmen Sie, ob der aktuelle Prozess ein 64-Bit-Prozess ist.
- Bestimmen Sie, ob ein beliebiger Prozess, der auf dem System ausgeführt wird, 64-Bit ist.
Wenn Sie nur feststellen möchten, ob der aktuell ausgeführte Prozess ein 64-Bit-Prozess ist, können Sie die in .NET Framework 4 neue Eigenschaft Environment.Is64BitProcess verwenden .
Wenn Sie feststellen möchten, ob es sich bei einer beliebigen Anwendung, die auf dem System ausgeführt wird, um einen 64-Bit-Prozess handelt, müssen Sie die Betriebssystembitität ermitteln. Wenn es sich um eine 64-Bit-Anwendung handelt, rufen Sie das Zielprozesshandle auf IsWow64Process()
:
static bool Is64BitProcess(IntPtr hProcess)
{
bool flag = false;
if (Environment.Is64BitOperatingSystem)
{
// On 64-bit OS, if a process is not running under Wow64 mode,
// the process must be a 64-bit process.
flag = !(NativeMethods.IsWow64Process(hProcess, out flag) && flag);
}
return flag;
}
In .Net Standard können Sie verwenden System.Runtime.InteropServices.RuntimeInformation.OSArchitecture