![]() |
General Reading »
Hardware & System »
System
Intermediate
OS Name, Version & Product TypeBy Sabin FinateanuEasy way for retrieving the OS name, version and product type. |
C#.NET1.1, Win2K, WinXP, Win2003, VistaVS.NET2003, Dev
|
|
Advanced Search Add to IE Search |
|
|
|
||||||||||||||||

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.
using System;
using System.Runtime.InteropServices;
[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;
}
[DllImport("kernel32.dll")]
private static extern bool GetVersionEx(ref OSVERSIONINFOEX osVersionInfo);
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;
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;
}
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;
}
}
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.
General
News
Question
Answer
Joke
Rant
Admin
Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+PgUp/PgDown to switch pages.
|
PermaLink |
Privacy |
Terms of Use
Last Updated: 25 Jul 2005 Editor: Smitha Vijayan |
Copyright 2005 by Sabin Finateanu Everything else Copyright © CodeProject, 1999-2010 Web20 | Advertise on the Code Project |