Alternativa a Environment.OsVersion.Version (https://msdn.microsoft.com/en-us/library/system.environment.osversion(v=vs.110).aspx), para aplicaciones que no se han manifestado para Windows 8.1 o Windows 10.
<DllImport("Ntdll.dll", CharSet:=CharSet.Unicode, ExactSpelling:=True)>
Friend Shared Function RtlGetVersion(<[In], Out> ByVal osversion As RtlOsVersionInfoExW) As Integer
End Function
<StructLayout(LayoutKind.Sequential)>
Public Class RtlOsVersionInfoExW
Public dwOSVersionInfoSize As UInt32
Public dwMajorVersion As UInt32
Public dwMinorVersion As UInt32
Public dwBuildNumber As UInt32
Public dwPlataformId As UInt32
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=128)> Public szCSDVersion As String
Public wServicePackMajor As UInt16
Public wServicePackMinor As UInt16
Public wSuiteMask As UInt16
Public bProductType As Byte
Public bReserved As Byte
End Class
Public Function NativeOsVersion() As Version
Dim osVersionInfo As New RtlOsVersionInfoExW()
osVersionInfo.dwOSVersionInfoSize = Marshal.SizeOf(GetType(RtlOsVersionInfoExW))
Dim status As Integer = RtlGetVersion(osVersionInfo)
If status <> 0 Then
' Throw New Win32Exception(RtlNtStatusToDosError(status))
Return Environment.OSVersion.Version
End If
Return New Version(osVersionInfo.dwMajorVersion,
osVersionInfo.dwMinorVersion,
osVersionInfo.dwBuildNumber)
End Function