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

Обнаружение 32-разрядных или 64-разрядных окон

Я хочу определить, является ли текущая ОС Windows 32-разрядной или 64-разрядной. Как достичь этого с помощью С++? Я не хочу, чтобы тип процессора я хотел использовать бит бит. Это связано с тем, что вы можете установить 32-разрядную ОС на 64-разрядный процессор.

4b9b3361

Ответ 1

IsWow64Process функция - это IsWow64Process или IsWow64Process2. Он сообщает вашему 32-битному приложению, работает ли оно на 64-битной Windows.

Если программа скомпилирована для 64 бит, она уже будет знать.

Ответ 2

Если ваш код 64-разрядный и работает, то Windows 64-бит - ничего не проверять. Если ваш процесс представляет собой 32-битный вызов IsWow64Process() - 32-разрядные процессы запускаются в WOW64 в 64-разрядной Windows и без WOW64 в противном случае.

Ответ 3

bool getWindowsBit(bool & isWindows64bit)
{
#if _WIN64

    isWindows64bit =  true;
    return true;

#elif _WIN32

    BOOL isWow64 = FALSE;

    //IsWow64Process is not available on all supported versions of Windows.
    //Use GetModuleHandle to get a handle to the DLL that contains the function
    //and GetProcAddress to get a pointer to the function if available.

    LPFN_ISWOW64PROCESS fnIsWow64Process  = (LPFN_ISWOW64PROCESS) 
GetProcAddress(GetModuleHandle(TEXT("kernel32")),"IsWow64Process");

    if(fnIsWow64Process)
    {
        if (!fnIsWow64Process(GetCurrentProcess(), &isWow64))
            return false;

        if(isWow64)
            isWindows64bit =  true;
        else
            isWindows64bit =  false;

        return true;
    }
    else
        return false;

#else

    assert(0);
    return false;

#endif
}

Ответ 4

вы можете использовать IsWow64Process, если ваше приложение представляет собой 32-битное приложение, если оно истинно, вы работаете на ОС x64, иначе это 32bit

Ответ 5

Вам нужно использовать GetNativeSystemInfo. Учитывая, что вы ожидаете, что это будет работать в 32-битной операционной системе, вам нужно использовать LoadLibrary + GetProcAddress, чтобы вы могли справиться с этой функцией, недоступной. Поэтому, если это не удается, вы знаете, что это 32-разрядная операционная система. Если нет, SYSTEM_INFO.wProcessorArchitecture дает вам реальный тип процессора вместо эмулируемого.

Ответ 6

Используйте GetNativeSystemInfo. Он получает параметр LPSYSTEM_INFO, чтобы получить то, что вы хотите.

SYSTEM_INFO Структура:

wProcessorArchitecture
 Архитектура процессора установленной операционной системы.

Ответ 7

Вы можете запустить команду windows systeminfo как процесс в вашей программе.

#include <stdlib.h>

system("systeminfo");

Одной из возвращаемых категорий является Тип системы.

Его вывод: System Type: x86-based PC или System Type: x64-based PC

Это может быть более сложное решение, чем предложение других, но я думал, что добавлю его как возможность. (Возможно, вы тоже за дополнительной информацией.)

Ответ 8

Вот еще один способ: GetSystemWow64Directory - Извлекает путь к системному каталогу, используемому WOW64. Этот каталог отсутствует на 32-битном Окна ". и" В 32-разрядной Windows функция всегда терпит неудачу, а расширенная ошибка установлена ​​на ERROR_CALL_NOT_IMPLEMENTED".

Я лично не уверен в использовании IsWow64Process, так как в MSDN в описании IsWow64Process есть текст "Обратите внимание, что этот метод не является надежным способом определить, является ли операционная система 64- разрядной версии Windows, потому что Kernel32.dll в текущих версиях 32-разрядной Windows также содержит эту функцию."

Ответ 9

Простая проверка - если EXE не запускается, то это 64-разрядный исполняемый файл, запущенный на 32-разрядной машине. 64-разрядная машина всегда будет запускать 32-разрядный исполняемый файл.

Из Microsoft,

Большинство программ, предназначенных для 32-разрядной версии Windows, будут 64-разрядная версия Windows. Известными исключениями являются многие антивирусы программы.

Драйверы устройств, предназначенные для 32-разрядной версии Windows, не работают на компьютерах с 64-разрядной версией Windows. Если вы пытаетесь установить принтер или другое устройство, в котором есть только 32-разрядные драйверы доступный, он не будет работать корректно в 64-разрядной версии Windows.

Однако в Windows вы также можете проверить наличие папки Program Files (x86) в качестве еще одной простой проверки. Не нужно проявлять фантазию.

Ответ 10

 static bool is64bitOS()
   {
      SYSTEM_INFO si;
      GetSystemInfo(&si);

      if((si.wProcessorArchitecture & PROCESSOR_ARCHITECTURE_IA64)||(si.wProcessorArchitecture & PROCESSOR_ARCHITECTURE_AMD64)==64)
      {
         return true;
      }
      else
      {
         return false;
      }

   }