Подтвердить что ты не робот

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

Как узнать, работает ли мое приложение (скомпилированное в Visual Studio 2008 как Any CPU) как 32-разрядное или 64-битное приложение?

4b9b3361

Ответ 1

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

Ответ 3

Я нашел этот код из Martijn Boven, который делает трюк:

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

Ответ 4

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

Обнаружение запущенной платформы процесса в С# (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;
}

Ответ 5

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