Обнаружьте, является ли текущая версия Windows 32 битами или 64 битами

Оказывается, Карабинер захватывал контроль над вводом и сбрасывал ключ home, который по иронии судьбы я установил, пытаясь переназначить ключ home, чтобы сбежать. Удаление его решило проблему.

62
задан npocmaka 20 August 2014 в 10:49
поделиться

7 ответов

В C#:

public bool Is64bit() {
    return Marshal.SizeOf(typeof(IntPtr)) == 8;
}

В VB.NET :

Public Function Is64bit() As Boolean
   If Marshal.SizeOf(GetType(IntPtr)) = 8 Then Return True
   Return False
End Function
1
ответ дан Carl Onager 24 November 2019 в 16:39
поделиться

Я не знаю, какой язык Вы используете, но .NET имеет переменную среды PROCESSOR_ARCHITEW6432, если ОС является 64-разрядной.

, Если все Вы хотите знать, работает ли Ваше приложение 32-разрядный или 64-разрядный, можно проверить IntPtr.Size. Это будет 4 при выполнении в 32-разрядном режиме и 8 при выполнении в 64-разрядном режиме.

4
ответ дан Peter Mortensen 24 November 2019 в 16:39
поделиться

Если можно сделать вызовы API, попытайтесь использовать GetProcAddress / GetModuleHandle для проверки на существование IsWow64Process, который только присутствует в Windows OS, которые имеют 64-разрядные версии.

Вы могли также попробовать ProgramFiles (x86) переменная среды, используемая в Vista/2008 для назад совместимости, но я не на 100% уверен в XP-64 или 2003-64.

Удачи!

8
ответ дан Jason 24 November 2019 в 16:39
поделиться

Я протестировал решение, которое я предложил в своем вопросе:

Протестированный на Windows Environment Variable: ProgramW6432

, Если это не пусто тогда, это - Windows на 64 бита. W

13
ответ дан Clay Nichols 24 November 2019 в 16:39
поделиться

Вот некоторый код Delphi, чтобы проверить, работает ли ваша программа в 64-битной операционной системе:

function Is64BitOS: Boolean;
{$IFNDEF WIN64}
type
  TIsWow64Process = function(Handle:THandle; var IsWow64 : BOOL) : BOOL; stdcall;
var
  hKernel32 : Integer;
  IsWow64Process : TIsWow64Process;
  IsWow64 : BOOL;
{$ENDIF}
begin
  {$IFDEF WIN64}
     //We're a 64-bit application; obviously we're running on 64-bit Windows.
     Result := True;
  {$ELSE}
  // We can check if the operating system is 64-bit by checking whether
  // we are running under Wow64 (we are 32-bit code). We must check if this
  // function is implemented before we call it, because some older 32-bit 
  // versions of kernel32.dll (eg. Windows 2000) don't know about it.
  // See "IsWow64Process", http://msdn.microsoft.com/en-us/library/ms684139.aspx
  Result := False;
  hKernel32 := LoadLibrary('kernel32.dll');
  if hKernel32 = 0 then RaiseLastOSError;
  try
    @IsWow64Process := GetProcAddress(hkernel32, 'IsWow64Process');
    if Assigned(IsWow64Process) then begin
      if (IsWow64Process(GetCurrentProcess, IsWow64)) then begin
        Result := IsWow64;
      end
      else RaiseLastOSError;
    end;
  finally
    FreeLibrary(hKernel32);
  end;  
  {$ENDIf}
end;
20
ответ дан 24 November 2019 в 16:39
поделиться

Чтобы проверить наличие 64-разрядной версии Windows в окне команд, я использую следующий шаблон:

test.bat:

@echo off
if defined ProgramFiles(x86) (
    @echo yes
    @echo Some 64-bit work
) else (
    @echo no
    @echo Some 32-bit work
)

ProgramFiles (x86) - это переменная среды, автоматически определяемая cmd.exe (как 32-разрядная, так и 64-разрядная версии) только на 64-разрядных машинах Windows.

63
ответ дан 24 November 2019 в 16:39
поделиться

Я использовал это в сценарии входа в систему для обнаружения 64-битной Windows

if "%ProgramW6432%" == "%ProgramFiles%" goto is64flag

6
ответ дан 24 November 2019 в 16:39
поделиться