|   Title: Use WMI to get operating system information in C#
![[Use WMI to get operating system information in C#]](howto_wmi_get_os_info.png)  
When the program starts, it executes the WMI query SELECT * FROM Win32_OperatingSystem. It loops through the results and calls subroutine GetValue for each of the many system parameters that should be available. The following code shows just a couple of the GetValue calls
 // Get and display OS properties.
private void Form1_Load(object sender, EventArgs e)
{
    ManagementObjectSearcher os_searcher = 
        new ManagementObjectSearcher(
            "SELECT * FROM Win32_OperatingSystem");
    foreach (ManagementObject mobj in os_searcher.Get())
    {
        GetValue(mobj, "BootDevice");
        GetValue(mobj, "BuildNumber");
        GetValue(mobj, "BuildType");
        GetValue(mobj, "Caption");
        GetValue(mobj, "CodeSet");
        ...
    }
    // Auto-size the columns.
    foreach (ColumnHeader col in lvwResults.Columns)
    {
        col.Width = -2;
    }
} 
The code first creates a ManagementObjectSearcher to execute the query. (To use this class, add a reference to System.Management and add a using statement for System.Management.)
 
Next the code loops through the returned ManagementObjects (there should be only one) and calls the GetValue method to get a bunch of values from the ManagementObject.
 
The following code shows the GetValue method.
 
 // Get a value from the ManagementObject.
private void GetValue(ManagementObject mobj, string property_name)
{
    string value;
    try
    {
        value = mobj[property_name].ToString();
    }
    catch (Exception ex)
    {
        value = "*** Error: " + ex.Message;
    }
    lvwResults.Items.Add(property_name).SubItems.Add(value);
} 
This method uses the property's name as a ManagementObject index. It converts the property into a string (if possible) and adds the name and its value to the program's ListView control.
 
This example fetches these properties:
 
 
    BootDevice
    BuildNumber
    BuildType
    Caption
    CodeSet
    CountryCode
    CreationClassName
    CSCreationClassName
    CSDVersion
    CSName
    CurrentTimeZone
    DataExecutionPrevention_Available
    DataExecutionPrevention_32BitApplications
    DataExecutionPrevention_Drivers
    DataExecutionPrevention_SupportPolicy
    Debug
    Description
    Distributed
    EncryptionLevel
    ForegroundApplicationBoost
    FreePhysicalMemory
    FreeSpaceInPagingFiles
    FreeVirtualMemory
    InstallDate
    LargeSystemCache
    LastBootUpTime
    LocalDateTime
    Locale
    Manufacturer
    MaxNumberOfProcesses
    MaxProcessMemorySize
    MUILanguages[]
    Name
    NumberOfLicensedUsers
    NumberOfProcesses
    NumberOfUsers
    OperatingSystemSKU
    Organization
    OSArchitecture
    OSLanguage
    OSProductSuite
    OSType
    OtherTypeDescription
    PAEEnabled
    PlusProductID
    PlusVersionNumber
    Primary
    ProductType
    QuantumLength
    QuantumType
    RegisteredUser
    SerialNumber
    ServicePackMajorVersion
    ServicePackMinorVersion
    SizeStoredInPagingFiles
    Status
    SuiteMask
    SystemDevice
    SystemDirectory
    SystemDrive
    TotalSwapSpaceSize
    TotalVirtualMemorySize
    TotalVisibleMemorySize
    Version
    WindowsDirectory
 
Download the example to experiment with it and to see additional details.
           |