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?

Lawrence Johnston
quelle

Antworten:

69
if (IntPtr.Size == 8) 
{
    // 64 bit machine
} 
else if (IntPtr.Size == 4) 
{
    // 32 bit machine
}
Perica Zivkovic
quelle
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)

Sam
quelle
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;
}
Lawrence Johnston
quelle
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;
}
Scott Ge
quelle
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

Owen Pauling
quelle