Třída OsVersionInfo

Jan Holan       11. 10. 2012             5222 zobrazení

K zjištění verze operačního systému slouží v .NET Frameworku třída OperatingSystem dostupná voláním Environment.OSVersion. Její vlastnost VersionString vrací popis operačního systému například takto: “Microsoft Windows NT 6.1.7601 Service Pack 1” (Windows NT zde označuje celou platformu Win32NT). Lepší popis namísto toho by ovšem byl tento: “Windows Server 2008 R2 Enterprise Service Pack 1 (Build 7601)”, a přesně to vrací třída OsVersionInfo, kterou si zde ukážeme.

K určení o jaký operační systém, verzi, edici a service pack používá třída několik Win32 API funkcí, stručně si je popíšeme:

GetVersionEx – Načte informace o operačním systému do struktury OSVERSIONINFOEX (nebo OSVERSIONINFO), která obsahuje MajorVersion, MinorVersion, BuildNumber, PlatformId, ProductTypeSuiteMask.

GetProductInfo – Funkcí se načte ProductType v systémech od Windows Vista.

GetSystemInfo nebo GetNativeSystemInfo – Funkcemi se načte struktura SYSTEM_INFO, ze které se vlastností ProcessorArchitecture zjistí, zda je jedná o x86 nebo x64 bitový systém.

GetSystemMetrics – Funkce se zde používá pro zjištění, zdali se nejedná o speciální edici (Starter, Media Center, Tablet) u Windows XP, nebo zda se nejedná o R2 verzi u Windows Server 2003.

Z těchto informací již odvodíme jméno operačního systému. Třída podle dané platformy, Major a Minor čísel verzí volá jednotlivé metody pro daný windows systém. Ukážeme si příklad metody pro systémy Windows 8Windows Server 2012:

/// <summary>
/// Windows 8 or Windows Server 2012 operating system informations
/// </summary>
private void SetWin8Win2012Information()
{
    m_OSWindows = OSWindowsID.Windows8_2K12;

    if (m_OSVersionInfo.wProductType == VER_NT_WORKSTATION)
    {
        m_OSName = "Windows 8";
        m_OSFullName = "Windows 8";

        #region ProductInfoProductType switch
        switch (m_ProductInfoProductType)
        {
            case PRODUCT_DEVELOPER_PREVIEW:
                m_OSFullName += " Developer Preview";
                return;
            case PRODUCT_CORE_COUNTRYSPECIFIC:
            case PRODUCT_CORE_SINGLELANGUAGE:
            case PRODUCT_CORE:
                //No name for edition
                return;
            case PRODUCT_CORE_N:
                m_OSFullName += " N";
                return;
            case PRODUCT_BUSINESS:
            case PRODUCT_PROFESSIONAL:
            case PRODUCT_PROFESSIONAL_WMC:
                m_OSFullName += " Pro";
                return;
            case PRODUCT_BUSINESS_N:
            case PRODUCT_PROFESSIONAL_N:
                m_OSFullName += " Pro N";
                return;
            case PRODUCT_ENTERPRISE:
            case PRODUCT_ENTERPRISE_EVALUATION:
            case PRODUCT_ULTIMATE:
                m_OSFullName += " Enterprise";
                return;
            case PRODUCT_ENTERPRISE_N:
            case PRODUCT_ENTERPRISE_N_EVALUATION:
            case PRODUCT_ULTIMATE_N:
                m_OSFullName += " Enterprise N";
                return;
        }
        #endregion
    }
    else
    {
        m_OSName = "Windows Server 2012";
        m_OSFullName = "Windows Server 2012";

        #region ProductInfoProductType switch
        switch (m_ProductInfoProductType)
        {
            case PRODUCT_DEVELOPER_PREVIEW:
                m_OSFullName += " Developer Preview";
                return;
            case PRODUCT_STANDARD_SERVER:
            case PRODUCT_STANDARD_EVALUATION_SERVER:
                m_OSFullName += " Standard";
                return;
            case PRODUCT_STANDARD_SERVER_CORE:
                m_OSFullName += " Standard (core installation)";
                return;
            case PRODUCT_STANDARD_SERVER_V:
                m_OSFullName += " Standard without Hyper-V";
                return;
            case PRODUCT_STANDARD_SERVER_CORE_V:
                m_OSFullName += " Standard without Hyper-V (core installation)";
                return;
            case PRODUCT_DATACENTER_SERVER:
            case PRODUCT_DATACENTER_EVALUATION_SERVER:
                m_OSFullName += " Datacenter";
                return;
            case PRODUCT_DATACENTER_SERVER_CORE:
                m_OSFullName += " Datacenter (core installation)";
                return;
            case PRODUCT_DATACENTER_SERVER_V:
                m_OSFullName += " Datacenter without Hyper-V";
                return;
            case PRODUCT_DATACENTER_SERVER_CORE_V:
                m_OSFullName += " Datacenter without Hyper-V (core installation)";
                return;
            case PRODUCT_SB_SOLUTION_SERVER:
            case PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT:
            case PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY:
            case PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING:
            case PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT:
            case PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL:
            case PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC:
            case PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC:
                m_OSFullName += " Essentials";
                return;
            case PRODUCT_SERVER_FOUNDATION:
                m_OSFullName += " Foundation";
                return;
            case PRODUCT_STORAGE_EXPRESS_SERVER:
            case PRODUCT_STORAGE_STANDARD_SERVER:
            case PRODUCT_STORAGE_STANDARD_EVALUATION_SERVER:
                m_OSName = "Windows Storage Server 2012";
                m_OSFullName = "Windows Storage Server 2012 Standard";
                return;
            case PRODUCT_STORAGE_WORKGROUP_SERVER:
            case PRODUCT_STORAGE_WORKGROUP_EVALUATION_SERVER:
                m_OSName = "Windows Storage Server 2012";
                m_OSFullName = "Windows Storage Server 2012 Workgroup";
                return;
            case PRODUCT_STORAGE_EXPRESS_SERVER_CORE:
            case PRODUCT_STORAGE_STANDARD_SERVER_CORE:
                m_OSName = "Windows Storage Server 2012";
                m_OSFullName = "Windows Storage Server 2012 Standard (core installation)";
                return;
            case PRODUCT_STORAGE_WORKGROUP_SERVER_CORE:
                m_OSName = "Windows Storage Server 2012";
                m_OSFullName = "Windows Storage Server 2012 Workgroup (core installation)";
                return;
            case PRODUCT_HYPERV:
                m_OSName = "Hyper-V Server 2012";
                m_OSFullName = "Hyper-V Server 2012";
                return;
        }
        #endregion
    }
}

Kromě názvu operačního systému (vlastnosti VersionStringOSName, OSFullName, OSWindows) třída dále umožňuje samostatně vrátit Platform, číslo verze a buildu (OSVersion, OSBuild), ProductType, WindowsArchitecture, dále použitý ServicePack a jeho verzi (ServicePackVersion, CSDBuildNumber), BuildLab text a příznaky SpecialEdition a CoreInstallation. Poslední vlastnost FrameworkVersionString vrací název instalované verze .NET Frameworku odvozené podle operačního systému a verze CLR.

Kód celé třídy již dále vysvětlení nepotřebuje, kompletní si jí můžete prohlédnout nebo stáhnout zde.

 

hodnocení článku

0       Hodnotit mohou jen registrované uživatelé.

 

Nový příspěvek

 

                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback