Подтвердить что ты не робот

Как обнаружить операционную систему Windows 8 с помощью С# 4.0?

Мне нужно обнаружить операционную систему Windows 8 в моем приложении Windows С# и выполнить некоторые настройки. Я знаю, что мы можем обнаружить Windows 7 с помощью Environment.OSVersion, но как можно обнаружить окна 8?

Спасибо заранее.

4b9b3361

Ответ 1

Version win8version = new Version(6, 2, 9200, 0);

if (Environment.OSVersion.Platform == PlatformID.Win32NT &&
    Environment.OSVersion.Version >= win8version)
{
    // its win8 or higher.
}

Обновление для Windows 8.1 и выше:

Хорошо, ребята, мне кажется, что этот фрагмент кода был отмечен как устаревший самой Microsoft. Я оставляю ссылку здесь, чтобы вы могли больше узнать об этом.

Короче говоря, он говорит:

Для окон 8 и выше всегда будет один и тот же номер версии (6, 2, 9200, 0). И вместо того, чтобы искать версию Windows, перейдите в поисках фактической функции, которую вы пытаетесь решить.

Ответ 2

Windows 8 или более поздней версии:

bool IsWindows8OrNewer()
{
    var os = Environment.OSVersion;
    return os.Platform == PlatformID.Win32NT && 
           (os.Version.Major > 6 || (os.Version.Major == 6 && os.Version.Minor >= 2));
}

Ответ 3

Проверьте ответ на следующий вопрос: Как получить "friendly" Название версии ОС?

Цитата:

Вы можете использовать WMI для получения имени продукта ( "Microsoft® Windows Server® 2008 Enterprise" ):

using System.Management;
var name = (from x in new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem").Get().OfType<ManagementObject>() select x.GetPropertyValue("Caption")).First();
return name != null ? name.ToString() : "Unknown";

Ответ 4

Начните с объявления структуры следующим образом:

[StructLayout(LayoutKind.Sequential)]
public struct OsVersionInfoEx
{
    public int dwOSVersionInfoSize;
    public uint dwMajorVersion;
    public uint dwMinorVersion;
    public uint dwBuildNumber;
    public uint dwPlatformId;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
    public string szCSDVersion;
    public UInt16 wServicePackMajor;
    public UInt16 wServicePackMinor;
    public UInt16 wSuiteMask;
    public byte wProductType;
    public byte wReserved;
}

Вам понадобится инструкция using:

    using System.Runtime.InteropServices;

В верхней части вашего соответствующего класса объявите:

    [DllImport("kernel32", EntryPoint = "GetVersionEx")]
    static extern bool GetVersionEx(ref OsVersionInfoEx osVersionInfoEx);

Теперь вызовите код следующим образом:

        const int VER_NT_WORKSTATION = 1;
        var osInfoEx = new OsVersionInfoEx();
        osInfoEx.dwOSVersionInfoSize = Marshal.SizeOf(osInfoEx);
        try
        {
            if (!GetVersionEx(ref osInfoEx))
            {
                throw(new Exception("Could not determine OS Version"));

            }
            if (osInfoEx.dwMajorVersion == 6 && osInfoEx.dwMinorVersion == 2 
                && osInfoEx.wProductType == VER_NT_WORKSTATION)
                MessageBox.Show("You've Got windows 8");

        }
        catch (Exception)
        {

            throw;
        }

Ответ 5

Не уверен, что это правильно, поскольку я могу проверить только версию Windows 8.

 int major = Environment.OSVersion.Version.Major;
 int minor = Environment.OSVersion.Version.Minor;

if ((major >= 6) && (minor >= 2))
{
    //do work here
}