5,696,576 members and growing! (19,534 online)
Email Password   helpLost your password?
General Reading » Hardware & System » System     Intermediate

OS Name, Version & Product Type

By Sabin Finateanu

Easy way for retrieving the OS name, version and product type.
C#Windows, .NET, .NET 1.1, NT4, Win2K, WinXP, Win2003, VistaVS.NET2003, Visual Studio, Dev

Posted: 25 Jul 2005
Updated: 25 Jul 2005
Views: 32,179
Bookmarked: 19 times
Announcements
Loading...



Search    
Advanced Search
Sitemap
13 votes for this Article.
Popularity: 4.08 Rating: 3.67 out of 5
2 votes, 15.4%
1
1 vote, 7.7%
2
0 votes, 0.0%
3
3 votes, 23.1%
4
7 votes, 53.8%
5

Sample Screenshot

Introduction

In my first tutorial I will present an easy way for retrieving the OS name, version and product type. Unfortunately, the .NET Framework doesn't have a way of identifying the OS service pack information and product type. That's why I used in my code the imported Windows API function GetVersionEx along with the System.Environmet.OSVersion property. The entire code consists of three methods, five properties and the additional structures, constants and DLL import. I will try as soon as possible to provide more comments to the code.

The Code

Required Namespaces:

using System;
using System.Runtime.InteropServices;

The Structure:

[StructLayout(LayoutKind.Sequential)]
private struct OSVERSIONINFOEX
{
    public int dwOSVersionInfoSize;
    public int dwMajorVersion;
    public int dwMinorVersion;
    public int dwBuildNumber;
    public int dwPlatformId;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
    public string szCSDVersion;
    public short wServicePackMajor;
    public short wServicePackMinor;
    public short wSuiteMask;
    public byte wProductType;
    public byte wReserved;
}

The DLL Import:

[DllImport("kernel32.dll")]
private static extern bool GetVersionEx(ref OSVERSIONINFOEX osVersionInfo);

The Constants:

private const int VER_NT_WORKSTATION = 1;
private const int VER_NT_DOMAIN_CONTROLLER = 2;
private const int VER_NT_SERVER = 3;
private const int VER_SUITE_SMALLBUSINESS = 1;
private const int VER_SUITE_ENTERPRISE = 2;
private const int VER_SUITE_TERMINAL = 16;
private const int VER_SUITE_DATACENTER = 128;
private const int VER_SUITE_SINGLEUSERTS = 256;
private const int VER_SUITE_PERSONAL = 512;
private const int VER_SUITE_BLADE = 1024;

The Methods:

public static string GetOSProductType()
{
    OSVERSIONINFOEX osVersionInfo = new OSVERSIONINFOEX();
    OperatingSystem osInfo = Environment.OSVersion;

    osVersionInfo.dwOSVersionInfoSize = 
           Marshal.SizeOf(typeof(OSVERSIONINFOEX));

    if(!GetVersionEx(ref osVersionInfo))
    {
        return "";
    }
    else
    {
        if(osInfo.Version.Major == 4)
        {
            if(osVersionInfo.wProductType == VER_NT_WORKSTATION)
            {
                // Windows NT 4.0 Workstation

                return " Workstation";
            }
            else if(osVersionInfo.wProductType == VER_NT_SERVER)
            {
                // Windows NT 4.0 Server

                return " Server";
            }
            else
            {
                return "";
            }
        }
        else if(osInfo.Version.Major == 5)
        {
            if(osVersionInfo.wProductType == VER_NT_WORKSTATION)
            {
                if((osVersionInfo.wSuiteMask & 
                    VER_SUITE_PERSONAL) == VER_SUITE_PERSONAL)
                {
                    // Windows XP Home Edition

                    return " Home Edition";
                }
                else
                {
                    // Windows XP / Windows 2000 Professional

                    return " Professional";
                }
            }
            else if(osVersionInfo.wProductType == VER_NT_SERVER)
            {
                if(osInfo.Version.Minor == 0) 
                { 
                    if((osVersionInfo.wSuiteMask & 
                        VER_SUITE_DATACENTER) == VER_SUITE_DATACENTER)
                    {
                        // Windows 2000 Datacenter Server

                        return " Datacenter Server";
                    }
                    else if((osVersionInfo.wSuiteMask & 
                             VER_SUITE_ENTERPRISE) == VER_SUITE_ENTERPRISE)
                    {
                        // Windows 2000 Advanced Server

                        return " Advanced Server";
                    }
                    else
                    {
                        // Windows 2000 Server

                        return " Server";
                    }
                } 
            }
            else
            {
                if((osVersionInfo.wSuiteMask & 
                    VER_SUITE_DATACENTER) == VER_SUITE_DATACENTER)
                {
                    // Windows Server 2003 Datacenter Edition

                    return " Datacenter Edition";
                }
                else if((osVersionInfo.wSuiteMask & 
                         VER_SUITE_ENTERPRISE) == VER_SUITE_ENTERPRISE)
                {
                    // Windows Server 2003 Enterprise Edition

                    return " Enterprise Edition";
                }
                else if((osVersionInfo.wSuiteMask & 
                         VER_SUITE_BLADE) == VER_SUITE_BLADE)
                {
                    // Windows Server 2003 Web Edition

                    return " Web Edition";
                }
                else
                {
                    // Windows Server 2003 Standard Edition

                    return " Standard Edition";
                }
            }
        }
    }

    return "";
}
public static string GetOSServicePack()
{
    OSVERSIONINFOEX osVersionInfo = new OSVERSIONINFOEX();
    osVersionInfo.dwOSVersionInfoSize = Marshal.SizeOf(typeof(OSVERSIONINFOEX));
    
    if(!GetVersionEx(ref osVersionInfo))
    {
        return "";
    }
    else
    {
        return " " + osVersionInfo.szCSDVersion;
    }
}
public static string GetOSName()
{
    OperatingSystem osInfo = Environment.OSVersion;
    string osName = "UNKNOWN";


    switch(osInfo.Platform)
    {
        case PlatformID.Win32Windows:
        {
            switch(osInfo.Version.Minor)
            {
                case 0:
                {
                    osName = "Windows 95";
                    break;
                }

                case 10:
                {
                    if(osInfo.Version.Revision.ToString() == "2222A")
                    {
                        osName = "Windows 98 Second Edition";
                    }
                    else
                    {
                        osName = "Windows 98";
                    }
                    break;
                }

                case 90:
                {
                    osName = "Windows Me";
                    break;
                }
            }
            break;
        }

        case PlatformID.Win32NT:
        {
            switch(osInfo.Version.Major)
            {
                case 3:
                {
                    osName = "Windows NT 3.51";
                    break;
                }

                case 4:
                {
                    osName = "Windows NT 4.0";
                    break;
                }

                case 5:
                {
                    if(osInfo.Version.Minor == 0)
                    {
                        osName = "Windows 2000";
                    }
                    else if(osInfo.Version.Minor == 1)
                    {
                        osName = "Windows XP";
                    }
                    else if(osInfo.Version.Minor == 2)
                    {
                        osName = "Windows Server 2003";
                    }
                    break;
                }

                case 6:
                {
                    osName = "Windows Vista";
                    break;
                }
            }
            break;
        }
    }

    return osName;
}

The Properties:

public static string OSVersion
{
    get
    {
        return Environment.OSVersion.Version.ToString();
    }
}
public static int OSMajorVersion
{
    get
    {
        return Environment.OSVersion.Version.Major;
    }
}
public static int OSMinorVersion
{
    get
    {
        return Environment.OSVersion.Version.Minor;
    }
}
public static int OSBuildVersion
{
    get
    {
        return Environment.OSVersion.Version.Build;
    }
}
public static int OSRevisionVersion
{
    get
    {
        return Environment.OSVersion.Version.Revision;
    }
}

Notes

  • OSProductType, GetOSServicePack: The space added to the returning result is for text formatting.
  • OSMajorVersion, OSMinorVersion, OSBuildVersion and OSRevisionVersion: Can be used for comparing OS versions.

I hope this code is useful. I would appreciate comments or bug reports for this code. Thank you.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Sabin Finateanu


I am a student at the Electronics and Telecommunications Faculty in Timisoara (Romania).
Occupation: Software Developer
Location: Romania Romania

Other popular Hardware & System articles:

Article Top
Sign Up to vote for this article
You must Sign In to use this message board.
FAQ FAQ Noise ToleranceSearch Search Messages 
 Layout  Per page   
 Msgs 1 to 12 of 12 (Total in Forum: 12) (Refresh)FirstPrevNext
General32 bit or 64 bit versionmembermiltash22:17 18 May '07  
GeneralRe: 32 bit or 64 bit versionmemberSabin Finateanu4:54 1 Jun '07  
GeneralRe: 32 bit or 64 bit versionmemberbirk12310:52 27 Nov '07  
GeneralRe: 32 bit or 64 bit versionmemberneredera21:38 31 Mar '08  
GeneralDomain controller in GetOSProductType()memberAE-NQN10:02 3 Mar '07  
GeneralRe: Domain controller in GetOSProductType()memberSabin Finateanu4:54 1 Jun '07  
GeneralWindows 98 SEmemberMoski3:13 15 Dec '05  
GeneralBug identifying Server 2003sussLiamN13:26 13 Oct '05  
AnswerRe: Bug identifying Server 2003memberSabin Finateanu3:18 14 Oct '05  
GeneralVistasupporterMarc Clifton3:07 25 Jul '05  
GeneralRe: VistamemberSabin Finateanu3:31 25 Jul '05  
GeneralRe: Vistamembergreat_scandinavian10:50 25 Feb '07  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 25 Jul 2005
Editor: Smitha Vijayan
Copyright 2005 by Sabin Finateanu
Everything else Copyright © CodeProject, 1999-2008
Web13 | Advertise on the Code Project