Обнаружьте версию Windows в .NET

Как я могу обнаружить версии ОС Windows в .NET?

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

139
задан Patrick Hofman 31 October 2016 в 16:23
поделиться

5 ответов

System.Environment.OSVersion содержит информацию, необходимую для различения большинства основных выпусков ОС Windows, но не всех. Он состоит из трех компонентов, которые соответствуют следующим версиям Windows:

+------------------------------------------------------------------------------+
|                    |   PlatformID    |   Major version   |   Minor version   |
+------------------------------------------------------------------------------+
| Windows 95         |  Win32Windows   |         4         |          0        |
| Windows 98         |  Win32Windows   |         4         |         10        |
| Windows Me         |  Win32Windows   |         4         |         90        |
| Windows NT 4.0     |  Win32NT        |         4         |          0        |
| Windows 2000       |  Win32NT        |         5         |          0        |
| Windows XP         |  Win32NT        |         5         |          1        |
| Windows 2003       |  Win32NT        |         5         |          2        |
| Windows Vista      |  Win32NT        |         6         |          0        |
| Windows 2008       |  Win32NT        |         6         |          0        |
| Windows 7          |  Win32NT        |         6         |          1        |
| Windows 2008 R2    |  Win32NT        |         6         |          1        |
| Windows 8          |  Win32NT        |         6         |          2        |
| Windows 8.1        |  Win32NT        |         6         |          3        |
+------------------------------------------------------------------------------+
| Windows 10         |  Win32NT        |        10         |          0        |
+------------------------------------------------------------------------------+

Для библиотеки, которая позволяет получить более полное представление о точном выпуске Windows, в котором выполняется текущая среда выполнения, отметьте галочкой из этой библиотеки .

Важное примечание : если в манифесте исполняемой сборки явно не указано, что ваша сборка exe совместима с Windows 8.1 и Windows 10.0, System.Environment.OSVersion вернет версию Windows 8, которая это 6,2 вместо 6,3 и 10,0! Источник: здесь .

293
ответ дан 23 November 2019 в 23:17
поделиться

Один способ:

public string GetOSVersion()
{
  int _MajorVersion = Environment.OSVersion.Version.Major;

  switch (_MajorVersion) {
    case 5:
      return "Windows XP";
    case 6:
      switch (Environment.OSVersion.Version.Minor) {
        case 0:
          return "Windows Vista";
        case 1:
          return "Windows 7";
        default:
          return "Windows Vista & above";
      }
      break;
    default:
      return "Unknown";
  }
}

Затем просто оберните функцию select case.

2
ответ дан 23 November 2019 в 23:17
поделиться

Через Environment.OSVersion , который «Получает объект System.OperatingSystem, содержащий идентификатор текущей платформы и номер версии».

7
ответ дан 23 November 2019 в 23:17
поделиться

Я использовал это, когда мне нужно было определить различные версии операционных систем Microsoft:

string getOSInfo()
{
   //Get Operating system information.
   OperatingSystem os = Environment.OSVersion;
   //Get version information about the os.
   Version vs = os.Version;

   //Variable to hold our return value
   string operatingSystem = "";

   if (os.Platform == PlatformID.Win32Windows)
   {
       //This is a pre-NT version of Windows
       switch (vs.Minor)
       {
           case 0:
               operatingSystem = "95";
               break;
           case 10:
               if (vs.Revision.ToString() == "2222A")
                   operatingSystem = "98SE";
               else
                   operatingSystem = "98";
               break;
           case 90:
               operatingSystem = "Me";
               break;
           default:
               break;
       }
   }
   else if (os.Platform == PlatformID.Win32NT)
   {
       switch (vs.Major)
       {
           case 3:
               operatingSystem = "NT 3.51";
               break;
           case 4:
               operatingSystem = "NT 4.0";
               break;
           case 5:
               if (vs.Minor == 0)
                   operatingSystem = "2000";
               else
                   operatingSystem = "XP";
               break;
           case 6:
               if (vs.Minor == 0)
                   operatingSystem = "Vista";
               else if (vs.Minor == 1)
                   operatingSystem = "7";
               else if (vs.Minor == 2)
                   operatingSystem = "8";
               else
                   operatingSystem = "8.1";
               break;
           case 10:
               operatingSystem = "10";
               break;
           default:
               break;
       }
   }
   //Make sure we actually got something in our OS check
   //We don't want to just return " Service Pack 2" or " 32-bit"
   //That information is useless without the OS version.
   if (operatingSystem != "")
   {
       //Got something.  Let's prepend "Windows" and get more info.
       operatingSystem = "Windows " + operatingSystem;
       //See if there's a service pack installed.
       if (os.ServicePack != "")
       {
           //Append it to the OS name.  i.e. "Windows XP Service Pack 3"
           operatingSystem += " " + os.ServicePack;
       }
       //Append the OS architecture.  i.e. "Windows XP Service Pack 3 32-bit"
       //operatingSystem += " " + getOSArchitecture().ToString() + "-bit";
   }
   //Return the information we've gathered.
   return operatingSystem;
}

Источник: здесь

56
ответ дан 23 November 2019 в 23:17
поделиться

Как предложил Р. Бемроуз, если вы делаете специфические функции Windows 7, вам следует посмотреть на Windows® API Code Pack for Microsoft® .NET Framework.

Он содержит класс CoreHelpers, который позволяет определить ОС, на которой вы сейчас работаете (только XP и выше, это требование для .NET сегодня)

Он также предоставляет несколько вспомогательных методов. Например, если вы хотите использовать список переходов в Windows 7, существует класс TaskbarManager, который предоставляет свойство IsPlatformSupported, и оно вернет true, если вы находитесь на Windows 7 и выше.

8
ответ дан 23 November 2019 в 23:17
поделиться