Jak sprawdzić, czy moja aplikacja działa jako aplikacja 32-bitowa lub 64-bitowa?

Jak sprawdzić, czy moja aplikacja (skompilowana w Visual Studio 2008 jako dowolny procesor) działa jako aplikacja 32-bitowa lub 64-bitowa?

Author: Peter Mortensen, 2008-11-05

5 answers

if (IntPtr.Size == 8) 
{
    // 64 bit machine
} 
else if (IntPtr.Size == 4) 
{
    // 32 bit machine
}
 62
Author: Perica Zivkovic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-20 08:20:55

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

Environment.Is64BitProcess

Odniesienie: środowisko. właściwość Is64BitProcess (MSDN)

 137
Author: Sam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-20 08:21:56

Znalazłem ten kod z Martijn Boven który robi sztuczkę:

public static bool Is64BitMode() {
    return System.Runtime.InteropServices.Marshal.SizeOf(typeof(IntPtr)) == 8;
}
 5
Author: Lawrence Johnston,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-05 18:09:05

Ten przykład kodu z Microsoft All-In-One Code Framework może odpowiedzieć na twoje pytanie:

Detect the process running platform in C# (CSPlatformDetector)

Przykładowy kod CSPlatformDetector pokazuje następujące zadania związane z wykrywaniem platformy:

  1. wykrywa nazwę bieżącego systemu operacyjnego. [13]} (np. "Microsoft Windows 7 Enterprise")
  2. Wykryj wersję bieżącego systemu operacyjnego. (np. "Microsoft Windows NT 6.1.7600.0")
  3. określić, czy bieżący system operacyjny jest 64-bitowym systemem operacyjnym.
  4. określa, czy bieżący proces jest 64-bitowym procesem.
  5. określić, czy dowolny proces uruchomiony w systemie jest 64-bitowy.

Jeśli chcesz tylko ustalić, czy aktualnie uruchomiony proces jest 64-bitowy procesu, można użyć właściwości environment.Is64BitProcess , która jest nowość w. NET Ramy 4.

I jeśli chcesz wykryć, czy dowolna aplikacja uruchomiona w systemie jest 64-bitowym procesem, musisz określić bitowość systemu operacyjnego, a jeśli jest 64-bitowy, wywołanie IsWow64Process() z obsługą procesu docelowego:

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;
}
 5
Author: Scott Ge,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-29 15:51:30

W standardzie. Net można użyć System.Runtime.InteropServices.RuntimeInformation.OSArchitecture

 0
Author: Owen Pauling,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-10 15:00:29