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"
を実行すると、「OSバージョン」で10.0.10240 N/A Build 10240
の正しい値が返されました。
Windows 8.1からアップグレードしたという事実を取り上げているからです。使用しているメソッドはレジストリを調べています。意図したとおりに機能しています。環境変数を使用して、どのオペレーティングシステムが使用されているかを判断するより適切な関数があります。 Stackoverflowではないため、コードを提供できません
–ラムハウンド8月26日1:12
それが一言で言えば答えです。アップグレード中、レジストリはビルド番号を古いものから新しいものに変更しません。くっつくだけ。
これは、HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion
からCurrentVersion
を読み取っていたためであり、すでに述べたように、そのエントリはWindowsの更新で更新された変更を取得しません。
確認するエントリは、同じキーのCurrentMajorVersionNumber
、CurrentMinorVersionNumber
、CurrentBuildNumber
です。
したがって、根本的な問題に戻るために、私はWindows Management Instrumentation(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