如何将MS Windows操作系统版本号转换为.NET中的产品名称?

如何将MS Windows操作系统版本号翻译成产品名称?

例如,在.NET中,可以使用以下两个属性来确定该产品是MS Windows Vista Ultimate Edition:

Environment.OSVersion.Platform returns Win32NT

Environment.OSVersion.Version returns 6.0.6001.65536

Solutions Collecting From Web of "如何将MS Windows操作系统版本号转换为.NET中的产品名称?"

如何净os版本

VB:

 Public Function GetOSVersion() As String Select Case Environment.OSVersion.Platform Case PlatformID.Win32S Return "Win 3.1" Case PlatformID.Win32Windows Select Case Environment.OSVersion.Version.Minor Case 0 Return "Win95" Case 10 Return "Win98" Case 90 Return "WinME" Case Else Return "Unknown" End Select Case PlatformID.Win32NT Select Case Environment.OSVersion.Version.Major Case 3 Return "NT 3.51" Case 4 Return "NT 4.0" Case 5 Select Case _ Environment.OSVersion.Version.Minor Case 0 Return "Win2000" Case 1 Return "WinXP" Case 2 Return "Win2003" End Select Case 6 Select Case _ Environment.OSVersion.Version.Minor Case 0 Return "Vista/Win2008server" Case 1 Return "Win7/Win2008server R2" Case 2 Return "Win8/Win2012server" Case 3 Return "Win8.1/Win2012server R2" End Select Case 10 //this will only show up if the application has a manifest file allowing W10, otherwise a 6.2 version will be used Return "Windows 10" Case Else Return "Unknown" End Select Case PlatformID.WinCE Return "Win CE" End Select End Function 

C#

 public string GetOSVersion() { switch (Environment.OSVersion.Platform) { case PlatformID.Win32S: return "Win 3.1"; case PlatformID.Win32Windows: switch (Environment.OSVersion.Version.Minor) { case 0: return "Win95"; case 10: return "Win98"; case 90: return "WinME"; } break; case PlatformID.Win32NT: switch (Environment.OSVersion.Version.Major) { case 3: return "NT 3.51"; case 4: return "NT 4.0"; case 5: switch (Environment.OSVersion.Version.Minor) { case 0: return "Win2000"; case 1: return "WinXP"; case 2: return "Win2003"; } break; case 6: switch(Environment.OSVersion.Version.Minor) { case 0: return "Vista/Win2008server"; case 1: return "Win7/Win2008server R2"; case 2: return "Win8/Win2012server"; case 3: return "Win8.1/Win2012server R2"; } break; case 10: //this will only show up if the application has a manifest file allowing W10, otherwise a 6.2 version will be used return "Windows 10"; } break; case PlatformID.WinCE: return "Win CE"; } return "Unknown"; } 

您可以使用WMI获取友好的产品名称(“Microsoft®Windowsserver®2008 Enterprise”):

 using System.Management; var name = (from x in new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem").Get().OfType<ManagementObject>() select x.GetPropertyValue("Caption")).First(); return name != null ? name.ToString() : "Unknown"; 

在msdn http://msdn.microsoft.com/en-us/library/ms724429(VS.85).aspx上有一个C ++的例子,还有一个关于如何在[VB]中使用它来添加的注释。净。 它看起来像你需要的“失踪”位是Win32函数GetProductInfo ( PInvoke.net参考 )。

在这个和Avram的答案之间,你应该能够组装完整版本的字符串。

这是我的解决方案,速度最快,没有选择案例。

结果可以根据需要自定义

  public static string SistemaOperativo { get { #region Dichiarazioni var osInfo = Environment.OSVersion; int platformID = (int)osInfo.Platform; int versionM = osInfo.Version.Major; int versionm = osInfo.Version.Minor; string servicePack = osInfo.ServicePack; #endregion #region Spiegazione logica /* * IT: * La chiave del dizionario è il risultato del concatenamento di * PlatformID,MajorVersion,MinorVersion, tutto convertito in Int32, * per esempio Platform ID=1 MajorVersion=4 MinorVersion=0, * il risultato è 140 ossia Windows 95 * * EN: * The key in Dictionary is the 'join' * of PlatformID,MajorVersion,MinorVersion, in int32, * eg. Platform ID=1 MajorVersion=4 MinorVersion=0, * the result is '140' (Windows 95) */ #endregion Dictionary<int, string> sistemiOperativi = new Dictionary<int, string>(){ {0, "Windows 3.1"}, {140, "Windows 95"}, {1410, "Windows 98"}, {1490, "Windows ME"}, {2351, "Windows NT 3.51"}, {240, "Windows 4.0"}, {250, "Windows 2000"}, {251, "Windows XP"}, {252, "Windows 2003"}, {260, "Windows Vista/server 2008"}, {261, "Windows 7"}, {-1, "Unknown"} }; int idUnivoco = int.Parse(string.Format("{0}{1}{2}", platformID, versionM, versionm)); string outValue = ""; if (sistemiOperativi.TryGetValue(idUnivoco, out outValue)) return string.Format("{0}{1}", outValue, servicePack); return sistemiOperativi[-1]; } } 

如果你只是想要一个GUI友好的信息消息我使用

My.Computer.Info.OSFullName&“(”+ My.Computer.Info.OSVersion +“)”

似乎是未来Windows版本的未来证明