2008-11-05 15 views

Odpowiedz

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

Czy kompilator nie odgrywa żadnej roli pomiędzy? –

5

znalazłem ten kod z Martijn Boven że załatwia sprawę:

public static bool Is64BitMode() { 
    return System.Runtime.InteropServices.Marshal.SizeOf(typeof(IntPtr)) == 8; 
} 
+23

Jest wielce prawdopodobne, bardziej wydajne, aby zadzwonić IntPtr.Size zamiast Marshal.SizeOf (typeof (IntPtr)) – JaredPar

+2

Chciałbym dać +1 do komentarza JaredPar za; tak bym to zrobił ... –

131

Jeśli używasz .NET 4.0, jest to jedna wkładka dla bieżącego procesu:

Environment.Is64BitProcess 

Numer referencyjny: Environment.Is64BitProcess Property (MSDN)

+1

Dzięki za przesłanie odpowiedzi, to świetnie wiedzieć. Nie zamierzam zmieniać obecnej zaakceptowanej odpowiedzi, ponieważ pierwotnie pytanie dotyczyło środowiska .NET 3.5, ale zachęcam ludzi do głosowania również na swoją odpowiedź. –

5

Ten przykładowy kod z Microsoft All-In-One ramowa Kod może odpowiedzieć na pytanie:

Detect the process running platform in C# (CSPlatformDetector)

Próbka Kod CSPlatformDetector wykazuje następujące zadania związane z wykrywaniem Platforma:

  1. Wykryj nazwę bieżącego systemu operacyjnego. (np. "Microsoft Windows 7 Enterprise")
  2. Wykryj wersję bieżącego systemu operacyjnego. (np. "Microsoft Windows NT 6.1.7600.0")
  3. Określa, czy bieżący system operacyjny jest 64-bitowym systemem operacyjnym.
  4. Sprawdź, czy bieżący proces jest procesem 64-bitowym.
  5. Określa, czy dowolny proces uruchomiony w systemie ma być 64-bitowy.

Jeśli chcesz tylko do określenia, czy aktualnie uruchomionego procesu jest 64-bitowy proces, można użyć właściwości Environment.Is64BitProcess, który jest nowością w .NET ramowej 4.

a jeśli aby wykryć, czy dowolna aplikacja działająca w systemie to proces 64-bit, trzeba określić bitness OS, a jeśli jest to 64-bitowy, wezwanie IsWow64Process() z uchwytem procesu docelowa:

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

Może być użyteczną biblioteką, tylko trochę przesada w tym kontekście :). –

0

w .NET standardu można użyć System.Runtime.InteropServices.RuntimeInformation.OSArchitecture

Powiązane problemy