在 Windows 10 上,VB.NET 代码Environment.OS.VersionString
输出Microsoft Windows NT 6.3.9600.0
。根据Microsoft 文档,Windows 10的版本号是10.0
,那么为什么VB.NET会将Windows 10识别为Windows 8.1呢?
我在命令提示符中执行了此操作,它返回了“操作系统版本”下systeminfo | findstr /C:"OS"
的正确值。10.0.10240 N/A Build 10240
答案1
因为它正在获取您从 Windows 8.1 升级的事实。您使用的方法是查看注册表。它按预期工作。有一个比使用环境变量确定正在使用的操作系统更合适的函数。我无法提供代码,因为这不是 Stackoverflow
— Ramhound 8 月 26 日 1:12
简而言之,这就是答案。在升级过程中,注册表不会将版本号从旧版本更改为新版本。它只是保持不变。
答案2
因此,回到根本问题...我使用 Windows 管理规范 (WMI) 以您期望的方式生成 Windows 版本号。例如,它报告 10.0.10586
以下是一段简短的代码片段
Public Class OS
' Use Windows Management Instrumentation (WMI) to get the OS version
Public Shared Function GetOSVersion() As String
Dim answer As String = ""
' add Imports System.Management and add a resource to System.Management
Dim osClass As New ManagementClass("Win32_OperatingSystem")
For Each queryObj As ManagementObject In osClass.GetInstances()
answer = DirectCast(queryObj.GetPropertyValue("Version"), String)
Next
Return answer
End Function
End Class
答案3
这是因为您正在阅读CurrentVersion
,HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion
并且正如已经说过的,该条目不会随着 Windows 更新而进行更新。
要检查的条目是同一键中的CurrentMajorVersionNumber
、CurrentMinorVersionNumber
和。CurrentBuildNumber
答案4
6.3 是 Windows 的内部版本,这表明自 Windows 7 以来,没有发布任何重大版本,这与微软希望你相信的相反。Windows 7、8、10 等名称只是营销名称。他们决定跳过 9 以匹配 Mac OS X。但真正的版本号是 6.3