使用osversion提取操作系统版本

时间:2017-11-15 14:03:41

标签: c#

我创建了一个小程序,用OSVERSIONINFO API提取我的操作系统版本。 我的问题是,当我在Windows 10 Enterprise 2016 LTSB PC上运行该程序时,结果是VER_SUITE_SINGLEUSERTS而不是VER_SUITE_ENTERPRISE。

Scada.Windows.API.OSVERSIONINFO osvi2 = new Scada.Windows.API.OSVERSIONINFO();
osvi2.dwOSVersionInfoSize = (uint)Marshal.SizeOf(typeof(Scada.Windows.API.OSVERSIONINFO));
Scada.Windows.API.GetVersionEx(ref osvi2);
String osname = String.Empty;
        if (osvi2.dwPlatformId == VER_PLATFORM_WIN32_NT)
        {
            if (osvi2.wProductType == VER_NT_WORKSTATION)
            {
                if (osvi2.dwMajorVersion == 5 && osvi2.dwMinorVersion == 0)
                    osname = "Windows 2000";
                else if (osvi2.dwMajorVersion == 5 && osvi2.dwMinorVersion == 1)
                    osname = "Windows XP";
                else if (osvi2.dwMajorVersion == 5 && osvi2.dwMinorVersion == 2)
                    osname = "Windows XP x64 PRO";
                else if (osvi2.dwMajorVersion == 6 && osvi2.dwMinorVersion == 0)
                    osname = "Windows VISTA";
                else if (osvi2.dwMajorVersion == 6 && osvi2.dwMinorVersion == 1)
                    osname = "Windows 7";
                else if (osvi2.dwMajorVersion == 6 && osvi2.dwMinorVersion == 2)
                    osname = "Windows 8";
                else if (osvi2.dwMajorVersion == 6 && osvi2.dwMinorVersion == 3)
                    osname = "Windows 8.1";
                else if (osvi2.dwMajorVersion == 10 && osvi2.dwMinorVersion == 0)
                    osname = "Windows 10";
            }
            else if (osvi2.wProductType == VER_NT_DOMAIN_CONTROLLER ||
                osvi2.wProductType == VER_NT_SERVER)
            {
                if (osvi2.dwMajorVersion == 5 && osvi2.dwMinorVersion == 2)
                    osname = "Windows Server 2003";
                else if (osvi2.dwMajorVersion == 6 && osvi2.dwMinorVersion == 0)
                    osname = "Windows Server 2008";
                else if (osvi2.dwMajorVersion == 6 && osvi2.dwMinorVersion == 1)
                    osname = "Windows Server 2008 R2";
                else if (osvi2.dwMajorVersion == 6 && osvi2.dwMinorVersion == 2)
                    osname = "Windows Server 2012";
                else if (osvi2.dwMajorVersion == 6 && osvi2.dwMinorVersion == 3)
                    osname = "Windows Server 2012 R2";
                else if (osvi2.dwMajorVersion == 10 && osvi2.dwMinorVersion == 0)
                    osname = "Windows Server 2010";
            }
        }
        osname += " ";

        Console.WriteLine(osname);
        //==================================================================

        switch (osvi2.wSuiteMask.ToString())
        {
            case "4":
                txt_Edition.Text = "VER_SUITE_BACKOFFICE";
                break;
            case "1024":
                txt_Edition.Text = "VER_SUITE_BLADE";
                break;
            case "16384":
                txt_Edition.Text = "VER_SUITE_COMPUTE_SERVER";
                break;
            case "128":
                txt_Edition.Text = "VER_SUITE_DATACENTER";
                break;
            case "2":
                txt_Edition.Text = "VER_SUITE_ENTERPRISE";
                break;
            case "64":
                txt_Edition.Text = "VER_SUITE_EMBEDDEDNT";
                break;
            case "512":
                txt_Edition.Text = "VER_SUITE_PERSONAL";
                break;
            case "256":
                txt_Edition.Text = "VER_SUITE_SINGLEUSERTS";
                break;
            case "1":
                txt_Edition.Text = "VER_SUITE_SMALLBUSINESS";
                break;
            case "32":
                txt_Edition.Text = "VER_SUITE_SMALLBUSINESS_RESTRICTED";
                break;
            case "8192":
                txt_Edition.Text = "VER_SUITE_STORAGE_SERVER";
                break;
            case "16":
                txt_Edition.Text = "VER_SUITE_TERMINAL";
                break;
            case "32768":
                txt_Edition.Text = "VER_SUITE_WH_SERVER";
                break;
        }

您对如何提取操作系统版本有任何建议吗? 我也尝试过使用此代码

var reg = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion");

            string productName = (string)reg.GetValue("ProductName");

            txt_PorductName.Text = productName;

但我宁愿使用API​​。

0 个答案:

没有答案