Как проверить, является ли ОС 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.