Detect Windows version in .NET Detect Windows version in .NET windows windows

Detect Windows version in .NET


System.Environment.OSVersion has the information you need for distinguishing most Windows OS major releases, but not all. It consists of three components which map to the following Windows versions:

+------------------------------------------------------------------------------+|                    |   PlatformID    |   Major version   |   Minor version   |+------------------------------------------------------------------------------+| Windows 95         |  Win32Windows   |         4         |          0        || Windows 98         |  Win32Windows   |         4         |         10        || Windows Me         |  Win32Windows   |         4         |         90        || Windows NT 4.0     |  Win32NT        |         4         |          0        || Windows 2000       |  Win32NT        |         5         |          0        || Windows XP         |  Win32NT        |         5         |          1        || Windows 2003       |  Win32NT        |         5         |          2        || Windows Vista      |  Win32NT        |         6         |          0        || Windows 2008       |  Win32NT        |         6         |          0        || Windows 7          |  Win32NT        |         6         |          1        || Windows 2008 R2    |  Win32NT        |         6         |          1        || Windows 8          |  Win32NT        |         6         |          2        || Windows 8.1        |  Win32NT        |         6         |          3        |+------------------------------------------------------------------------------+| Windows 10         |  Win32NT        |        10         |          0        |+------------------------------------------------------------------------------+

For a library that allows you to get a more complete view of the exact release of Windows that the current execution environment is running in, check out this library.

Important note: if your executable assembly manifest doesn't explicitly state that your exe assembly is compatible with Windows 8.1 and Windows 10.0, System.Environment.OSVersion will return Windows 8 version, which is 6.2, instead of 6.3 and 10.0! Source: here.

Update: In .NET 5.0 and later, System.Environment.OSVersion always returns the actual OS version. For more information, see Environment.OSVersion returns the correct operating system version.


I used this when I had to determine various Microsoft Operating System versions:

string getOSInfo(){   //Get Operating system information.   OperatingSystem os = Environment.OSVersion;   //Get version information about the os.   Version vs = os.Version;   //Variable to hold our return value   string operatingSystem = "";   if (os.Platform == PlatformID.Win32Windows)   {       //This is a pre-NT version of Windows       switch (vs.Minor)       {           case 0:               operatingSystem = "95";               break;           case 10:               if (vs.Revision.ToString() == "2222A")                   operatingSystem = "98SE";               else                   operatingSystem = "98";               break;           case 90:               operatingSystem = "Me";               break;           default:               break;       }   }   else if (os.Platform == PlatformID.Win32NT)   {       switch (vs.Major)       {           case 3:               operatingSystem = "NT 3.51";               break;           case 4:               operatingSystem = "NT 4.0";               break;           case 5:               if (vs.Minor == 0)                   operatingSystem = "2000";               else                   operatingSystem = "XP";               break;           case 6:               if (vs.Minor == 0)                   operatingSystem = "Vista";               else if (vs.Minor == 1)                   operatingSystem = "7";               else if (vs.Minor == 2)                   operatingSystem = "8";               else                   operatingSystem = "8.1";               break;           case 10:               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.   return operatingSystem;}

Source: here


I use the ManagementObjectSearcher of namespace System.Management

Example:

string r = "";using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem")){    ManagementObjectCollection information = searcher.Get();    if (information != null)    {        foreach (ManagementObject obj in information)        {            r = obj["Caption"].ToString() + " - " + obj["OSArchitecture"].ToString();        }    }    r = r.Replace("NT 5.1.2600", "XP");    r = r.Replace("NT 5.2.3790", "Server 2003");    MessageBox.Show(r);}

Do not forget to add the reference to the Assembly System.Management.dll and put the using: using System.Management;

Result:

inserir a descrição da imagem aqui

Documentation