Определить версию Windows в .net - PullRequest
130 голосов
/ 12 мая 2010

Как я могу определить версии ОС Windows в .net?

Какой код я могу использовать?

Ответы [ 13 ]

1 голос
/ 02 августа 2017
  1. Добавить ссылку на Microsoft.VisualBasic.
  2. Включить пространство имен using Microsoft.VisualBasic.Devices;
  3. Использование new ComputerInfo().OSFullName

Возвращаемое значение: «Microsoft Windows 10 Enterprise»

0 голосов
/ 09 мая 2019

Это довольно старый вопрос, но мне недавно пришлось решить эту проблему, и я нигде не опубликовал свое решение.

Самый простой (и самый простой способ, на мой взгляд), это просто использовать вызов pinvoke для RtlGetVersion

[DllImport("ntdll.dll", SetLastError = true)]
internal static extern uint RtlGetVersion(out Structures.OsVersionInfo versionInformation); // return type should be the NtStatus enum

[StructLayout(LayoutKind.Sequential)]
internal struct OsVersionInfo
{
    private readonly uint OsVersionInfoSize;

    internal readonly uint MajorVersion;
    internal readonly uint MinorVersion;

    private readonly uint BuildNumber;

    private readonly uint PlatformId;

    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
    private readonly string CSDVersion;
}

Где номера версий Major и Minor в этой структуре соответствуют значениям в таблице принятого ответа.

Возвращает правильный номер версии Windows в отличие от устаревших функций GetVersion & GetVersionEx из kernel32

0 голосов
/ 06 августа 2012

Не усложняйте проблему.

string osVer = System.Environment.OSVersion.Version.ToString();

if (osVer.StartsWith("5")) // windows 2000, xp win2k3
{
    MessageBox.Show("xp!");
}
else // windows vista and windows 7 start with 6 in the version #
{
    MessageBox.Show("Win7!");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...