Wie kann ich feststellen, ob meine Anwendung als 32-Bit- oder 64-Bit-Anwendung ausgeführt wird?


70

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:


69
if (IntPtr.Size == 8) 
{
    // 64 bit machine
} 
else if (IntPtr.Size == 4) 
{
    // 32 bit machine
}

Spielt der Compiler dazwischen keine Rolle?
Sudhir Vyasaraja

1
Nur für diejenigen, die auf .NET 4+ sind - es gibt jetzt eine bessere Antwort über Environment.Is64BitProcess
Sevenate

159

Wenn Sie .NET 4.0 verwenden, ist dies ein Einzeiler für den aktuellen Prozess:

Environment.Is64BitProcess

Referenz: Environment.Is64BitProcess-Eigenschaft (MSDN)


2
Vielen Dank für die Antwort, das ist gut zu wissen. Ich werde die derzeit akzeptierte Antwort nicht ändern, da es sich bei dieser Frage ursprünglich um .NET 3.5 handelte, aber ich möchte die Leute ermutigen, auch Ihre Antwort zu bewerten.
Lawrence Johnston

5

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;
}

25
Es ist wahrscheinlich effizienter, IntPtr.Size anstelle von Marshal.SizeOf (typeof (IntPtr))
JaredPar

5

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:

  1. Ermitteln Sie den Namen des aktuellen Betriebssystems. (zB "Microsoft Windows 7 Enterprise")
  2. Ermitteln Sie die Version des aktuellen Betriebssystems. (zB "Microsoft Windows NT 6.1.7600.0")
  3. Stellen Sie fest, ob das aktuelle Betriebssystem ein 64-Bit-Betriebssystem ist.
  4. Bestimmen Sie, ob der aktuelle Prozess ein 64-Bit-Prozess ist.
  5. 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;
}

1
Kann eine nützliche Bibliothek sein, in diesem Zusammenhang nur ein bisschen übertrieben :).
Gert Arnold

0

In .Net Standard können Sie verwenden System.Runtime.InteropServices.RuntimeInformation.OSArchitecture

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.