如何获得 WINDOWS 版本[C# 版]open in new window

using System;
using System.Runtime.InteropServices;

namespace GetWindowsVersion
{
    [StructLayout(LayoutKind.Sequential)]
    public class OSVersionInfo
    {
        public int OSVersionInfoSize;
        public int MajorVersion;
        public int MinorVersion;
        public int BuildNumber;
        public int PlatformId;

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
        public String versionString;
    }

    [StructLayout(LayoutKind.Sequential)]
    public struct OSVersionInfo2
    {
        public int OSVersionInfoSize;
        public int MajorVersion;
        public int MinorVersion;
        public int BuildNumber;
        public int PlatformId;

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
        public String versionString;
    }

    public class LibWrap
    {
        [DllImport("kernel32")]
        public static extern bool GetVersionEx([In, Out] OSVersionInfo osvi);

        [DllImport("kernel32", EntryPoint = "GetVersionEx")]
        public static extern bool GetVersionEx2(ref OSVersionInfo2 osvi);
    }

    public class App
    {
        public static void Main()
        {
            Console.WriteLine("\nPassing OSVersionInfo as class");

            OSVersionInfo osvi = new OSVersionInfo();
            osvi.OSVersionInfoSize = Marshal.SizeOf(osvi);

            LibWrap.GetVersionEx(osvi);

            Console.WriteLine("Class size: {0} \nOperation System : {1}\nPack: {2}", osvi.OSVersionInfoSize, OpSysName(osvi.MajorVersion, osvi.MinorVersion, osvi.PlatformId), osvi.versionString);
            Console.WriteLine("{0}", osvi.PlatformId);

            Console.WriteLine("\nPassing OSVersionInfo as struct");

            OSVersionInfo2 osvi2 = new OSVersionInfo2();
            osvi2.OSVersionInfoSize = Marshal.SizeOf(osvi2);

            LibWrap.GetVersionEx2(ref osvi2);
            Console.WriteLine("Static size: {0} \nOperation System : {1}\nPack: {2}", osvi2.OSVersionInfoSize, OpSysName(osvi2.MajorVersion, osvi2.MinorVersion, osvi2.PlatformId), osvi2.versionString);
        }

        public static String OpSysName(int MajorVersion, int MinorVersion, int PlatformId)
        {
            String str_opn = String.Format("{0}.{1}", MajorVersion, MinorVersion);

            switch (str_opn)
            {
                case "4.0":
                    return win95_nt40(PlatformId);
                case "4.10":
                    return "Windows 98";
                case "4.90":
                    return "Windows Me";
                case "3.51":
                    return "Windows NT 3.51";
                case "5.0":
                    return "Windwos 2000";
                case "5.1":
                    return "Windwos XP";
                case "5.2":
                    return "Windows Server 2003 family";
                default:
                    return "This windows version is not distinguish!";
            }
        }
        
        public static String win95_nt40(int PlatformId)
        {
            switch (PlatformId)
            {
                case 1:
                    return "Windows 95";
                case 2:
                    return "Windows NT 4.0";
                default:
                    return "This windows version is not distinguish!";
            }
        }
    }
}
Contributors: FHL