美文网首页
C# 获取 Windows 操作系统版本和名称

C# 获取 Windows 操作系统版本和名称

作者: 编程小世界 | 来源:发表于2019-06-27 20:28 被阅读0次

1. 概述

从 Windows 10 开始,微软已经弃用了 GetVersionEx 方式获取 Windows 系统版本 [官方解释]。这就导致网上一大批C#获取 Windows 版本的代码把 Windows 10 识别为 Windows 8。比如我的电脑 Windows 10 就被识别成 6.2.9200,进而判断出是 Windows 8。

按照微软官方论坛提示,可以通过 WMI(Windows Management Instruction) 获取正确系统的版本号。下面把传统获取方式、WMI获取方式和直接获取操作系统名称的三个方法列出来。

2. 展示

2.1 传统获取方式(弃用)

传统获取 Windows 系统版本的方法:先获取 Windows 系统的版本号,再通过版本号比对出操作系统名称。

publicstaticstringget_OSVersion(){//Get Operating system information.OperatingSystem os = Environment.OSVersion;//Get version information about the os.Version vs = os.Version;//Variable to hold our return valuestringoperatingSystem ="";if(os.Platform == PlatformID.Win32Windows)    {//This is a pre-NT version of Windowsswitch(vs.Minor)        {case0:                operatingSystem ="95";break;case10:if(vs.Revision.ToString() =="2222A")                    operatingSystem ="98SE";elseoperatingSystem ="98";break;case90:                operatingSystem ="Me";break;default:break;        }    }elseif(os.Platform == PlatformID.Win32NT)    {switch(vs.Major)        {case3:                operatingSystem ="NT 3.51";break;case4:                operatingSystem ="NT 4.0";break;case5:if(vs.Minor ==0)                    operatingSystem ="2000";elseoperatingSystem ="XP";break;case6:if(vs.Minor ==0)                    operatingSystem ="Vista";elseif(vs.Minor ==1)                    operatingSystem ="7";elseif(vs.Minor ==2)                    operatingSystem ="8";elseoperatingSystem ="8.1";break;case10:                operatingSystem ="10";break;default:break;        }    }//Make sure we actually got something in our OS check//We don't want to just return " Service Pack 2" or " 32-bit"//That information is useless without the OS version.if(operatingSystem !="")    {//Got something.  Let's prepend "Windows" and get more info.operatingSystem ="Windows "+ operatingSystem;//See if there's a service pack installed.if(os.ServicePack !="")        {//Append it to the OS name.  i.e. "Windows XP Service Pack 3"operatingSystem +=" "+ os.ServicePack;        }//Append the OS architecture.  i.e. "Windows XP Service Pack 3 32-bit"//operatingSystem += " " + getOSArchitecture().ToString() + "-bit";}//Return the information we've gathered.returnoperatingSystem;}

3.2 通过 WMI 获取操作系统版本

publicstaticstringget_OSVersion(){try{        ManagementObject mo = GetMngObj("Win32_OperatingSystem");if(null== mo)returnstring.Empty;returnmo["Version"]asstring;    }catch(Exception e)    {returnstring.Empty;    }}

如下图所示,获取 Windows 10 操作系统版本号正确。

3.3 直接获取操作系统名称

根据下面的 Windows 操作系统名称和版本好的对应关系表,可以发现很多不同系列的操作系统拥有相同的主版本号和子版本号,因此通过比对版本号的方式来判断操作系统名称是很不靠谱。

+------------------------------------------------------------------------------------+|                          |PlatformID|  Major version  |Minor version|

+------------------------------------------------------------------------------------+

|Windows95|  Win32Windows  |4|          0        || Windows 98              |Win32Windows|        4        |10|

|Windows Me|  Win32Windows  |4|        90        || Windows NT 4.0          |Win32NT|        4        |0|

|Windows2000|  Win32NT        |5|          0        || Windows XP              |Win32NT|        5        |1|

|Windows XP64-Bit Edition|  Win32NT        |5|          1        || Windows 2003            |Win32NT|        5        |2|

|Windows Server2003|  Win32NT        |5|          2        || Windows Server 2003 R2  |Win32NT|        5        |2|

|Windows2003|  Win32NT        |5|          2        || Windows Vista            |Win32NT|        6        |0|

|Windows2008|  Win32NT        |6|          0        || Windows Server 2008      |Win32NT|        6        |0|

|Windows7|  Win32NT        |6|          1        || Windows 2008 R2          |Win32NT|        6        |1|

|Windows Server2008R2|  Win32NT        |6|          1        || Windows 8                |Win32NT|        6        |2|

|Windows Server2012|  Win32NT        |6|          2        || Windows 8.1              |Win32NT|        6        |3|

|Windows Server2012R2|  Win32NT        |6|          3        |+------------------------------------------------------------------------------------+| Windows Server 2016 Technical Preview|Win32NT| 10            |0|

|Windows10|  Win32NT        |10|          0        |+------------------------------------------------------------------------------------+

本文提供了一种简单获取操作系统名称的方式:

newComputerInfo().OSFullName

需要引用库:using Microsoft.VisualBasic.Devices;

实际测试了 Windows 10 、Windows 2012 R2 和 Windows 2008 R2,如下图所示:

以上,其他版本的操作系统如果获取有问题,还请留言告知,谢谢!

看我主页简介免费C++学习资源,视频教程、职业规划、面试详解、学习路线、开发工具

每晚8点直播讲解C++编程技术。

相关文章

  • C# 获取 Windows 操作系统版本和名称

    1. 概述 从 Windows 10 开始,微软已经弃用了 GetVersionEx 方式获取 Windows 系...

  • iPhone硬件、软件参数获取

    获取手机屏幕宽度和高度 手机分辨率 获取手机idfa 获取手机操作系统版本 设备厂商名称 获取手机运营商 获取手机...

  • 2019-12-16 C# 获取当前方法的名称空间、类名和方法名

    C# 获取当前方法的名称空间、类名和方法名称

  • Windows 7(直接安装)系统安装教程

    Windows 7,中文名称视窗7,是由微软公司(Microsoft)开发的操作系统,内核版本号为Windows ...

  • Windows Neptune

    引: 本篇介绍的是一个未完成开发的Windows操作系统。 请不要在评论区留下 “如何获取该操作系统的出厂版本” ...

  • Windows Triton

    引: 本篇介绍的是一个未完成开发的Windows操作系统。 请不要在评论区留下 “如何获取该操作系统的出厂版本” ...

  • IOS --- 获取系统信息

    1 . 获取项目名称 2 . 获取版本号 3 . 获取设备名称 4 . 获取系统版本 5 . 获取屏幕分辨率 6 ...

  • jquery 工具类函数

    一、获取浏览器的名称与版本信息 在jQuery中,通过$.browser对象可以获取浏览器的名称和版本信息,如$....

  • ThoughtWorks作业readme

    关于作业 本次作业给出了Windows操作系统和类UNIX操作系统下的两个版本,两者的代码相同。 Windows操...

  • jQuery常用函数

    1、获取浏览器的名称与版本信息 在jQuery中,通过$.browser对象可以获取浏览器的名称和版本信息 $.b...

网友评论

      本文标题:C# 获取 Windows 操作系统版本和名称

      本文链接:https://www.haomeiwen.com/subject/ojsdcctx.html