Как узнать, работает ли мое приложение как 32-разрядное или 64-разрядное приложение?

StackOverflow https://stackoverflow.com/questions/266082

  •  06-07-2019
  •  | 
  •  

Вопрос

Как узнать, работает ли мое приложение (скомпилированное в Visual & nbsp; Studio & nbsp; 2008 как Любой ЦП ) как 32-разрядное или 64-разрядное приложение?

Это было полезно?

Решение

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

Другие советы

Если вы используете .NET 4.0, это однострочная версия для текущего процесс:

Environment.Is64BitProcess

Ссылка: Свойство Environment.Is64BitProcess (MSDN)

Я нашел этот код у Мартина Бовена , который делает свое дело:

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

Этот пример кода из Microsoft All-In-One Code Framework может ответить на ваш вопрос:

Обнаружение платформы, на которой запущен процесс в C # (CSPlatformDetector)

  

Пример кода CSPlatformDetector демонстрирует следующие задачи   связанные с обнаружением платформы:

     <Ол>   
  • Определить имя текущей операционной системы. (например, «Microsoft Windows 7 Enterprise»)
  •   
  • Определить версию текущей операционной системы. (например, «Microsoft Windows NT 6.1.7600.0»)
  •   
  • Определите, является ли текущая операционная система 64-битной операционной системой.
  •   
  • Определите, является ли текущий процесс 64-битным процессом.
  •   
  • Определите, является ли произвольный процесс, работающий в системе, 64-разрядным.
  •   

    Если вы просто хотите определить, является ли текущий запущенный процесс 64-битным В этом процессе вы можете использовать Environment.Is64BitProcess свойство, которое новое в .NET Рамочная 4.

    А если вы хотите определить, работает ли произвольное приложение в системе это 64-битный процесс, вам нужно определить битность ОС, и если он 64-битный, вызовите 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;
    }
    

    В .Net Standard вы можете использовать System.Runtime.InteropServices.RuntimeInformation.OSArchitecture

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top