20

是否可以使用 vb.net 代码检查计算机是 32 位还是 64 位?我只想在消息中显示结果。

请指教。

4

7 回答 7

36

Environment.Is64BitOperatingSystem应该做得很好。

确定当前操作系统是否为 64 位操作系统。

假设 false 表示 32 位环境。

如果您想知道进程是否为 64 位(因为您可以在 64 位操作系统上运行 32 位进程),请使用Environment.Is64BitProcess

确定当前进程是否为 64 位进程。


这两者都已在 .NET 4.0 中引入。

于 2013-01-20T09:05:12.597 回答
1

如果在 64 位 Windows 上的 32 位 .NET Framework 2.0 中运行,IntPtr.Size 将不会返回正确的值(它将返回 32 位)。

您必须首先检查是否在 64 位进程中运行(我认为在 .NET 中您可以通过检查 IntPtr.Size 来做到这一点),如果您在 32 位进程中运行,您仍然必须调用 Win API函数 IsWow64Process。如果返回 true,则您正在 64 位 Windows 上的 32 位进程中运行。

Microsoft 的 Raymond Chen: 如何以编程方式检测您是否在 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
于 2013-01-20T09:13:27.717 回答
1

我只是使用这段代码,它工作正常:

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
于 2014-11-20T03:20:26.267 回答
0
If IntPtr.Size = 8 Then

    ' 64 bit machine

ElseIf IntPtr.Size = 4 Then

    ' 32 bit machine

End If
于 2014-03-14T13:49:26.413 回答
0

VB.NET:我想要的工作如下。在 x64 所有配置(调试、发布等)中定义自定义常量Win64,如下图所示,并按如下方式使用它:

If (Win64) Then

   '64 bit code
else
   ' 32 bit code here
End If

在此处输入图像描述

于 2016-12-29T08:49:40.857 回答
-1
Msgbox (Runtime.InteropServices.Marshal.SizeOf(GetType(IntPtr)) * 8)
于 2015-10-03T17:25:59.227 回答
-2

采用

If System.IO.Directory.Exists("C:\Program Files (x86)") Then
  MsgBox("64-Bit OS")
Else
  MsgBox("32-Bit OS")
End If

它将适用于所有框架版本

于 2018-05-22T08:35:34.900 回答