Как проверить, является ли ОС 32-разрядной ОС или 64 бит

Можно ли проверить, является ли компьютер 32-разрядным или 64-битным с использованием кода vb.net? Я просто хочу отобразить результат в сообщении.

Просьба сообщить.

6 ответов

Environment.Is64BitOperatingSystem должен делать красиво.

Определяет, является ли текущая операционная система 64-разрядной операционной системой.

Предполагается, что ложь означает 32-битную среду.

Если вы хотите узнать, является ли процесс 64-битным (так как вы можете запустить 32-битный процесс на 64-битной ОС), используйте Environment.Is64BitProcess:

Определяет, является ли текущий процесс 64-битным процессом.

Оба из них были внедрены в .NET 4.0.


IntPtr.Size не вернет правильное значение при запуске в 32-разрядной .NET Framework 2.0 на 64-битной Windows (он вернет 32-разрядную версию).

Сначала вы должны проверить, работает ли в 64-разрядном процессе (я думаю, что в .NET вы можете сделать это, проверив IntPtr.Size), и если вы работаете в 32-битном процессе, вам все равно придется звонить функция Win API IsWow64Process. Если это возвращает true, вы выполняете 32-разрядный процесс в 64-разрядной Windows.

Microsoft Раймонд Чен: Как программно определить, работаете ли вы в 64-битной Windows.

Решение:

Private is64BitProcess As Boolean = (IntPtr.Size = 8)
Private is64BitOperatingSystem As Boolean = is64BitProcess OrElse InternalCheckIsWow64()
<dllimport("kernel32.dll", setlasterror:="True," callingconvention:="CallingConvention.Winapi)"> _ Public Shared Function IsWow64Process( _ ByVal hProcess As Microsoft.Win32.SafeHandles.SafeHandleZeroOrMinusOneIsInvalid, _ ByRef wow64Process As Boolean) As <marshalas(unmanagedtype.bool)> Boolean End Function
Public Shared Function InternalCheckIsWow64() As Boolean If (Environment.OSVersion.Version.Major = 5 AndAlso Environment.OSVersion.Version.Minor >= 1) OrElse Environment.OSVersion.Version.Major >= 6 Then Using p As Process = Process.GetCurrentProcess() Dim retVal As Boolean If Not IsWow64Process(p.Handle, retVal) Then Return False End If Return retVal End Using Else Return False End If
End Function
</marshalas(unmanagedtype.bool)></dllimport("kernel32.dll",>


VB.NET: Мне нужно работать, как показано ниже. Определите пользовательскую константу Win64 в x64 всех конфигурациях (debug, release и т.д.), Как на диаграмме ниже, и используйте ее следующим образом:

If (Win64) Then '64 bit code
else ' 32 bit code here
End If


If IntPtr.Size = 8 Then ' 64 bit machine
ElseIf IntPtr.Size = 4 Then ' 32 bit machine
End If


Я просто использую этот кусок кода, и он отлично работает:

If System.Environment.Is64BitOperatingSystem = True Then MessageBox.Show("OS System : 64 Bit Operating System")
Else MessageBox.Show("OS System : 32 Bit Operating System")
End If


Msgbox (Runtime.InteropServices.Marshal.SizeOf(GetType(IntPtr)) * 8)

licensed under cc by-sa 3.0 with attribution.