Чат codeby в telegram перезагрузка

Обсуждаем вопросы информационной безопасности, методы защиты информации, программирование. Задавайте свои вопросы и комментируйте чужие.  Подробнее ...

Как определить версию Windows с помощью языка C#

Сразу же хотелось бы сказать, что существует несколько способов решения данной задачи. В этой статье будут рассмотрены примеры с использование библиотек .NET и реестра, а в следующей статье WinAPI и WMI.

Для определения текущей версии Windows воспользуемся классом Environment пространства имён System.

Выполним следующий код

В результате получим текущую версию операционной системы в линейке WINDOWS NT, например:

Полученная строка состоит из компонентом разделенных точкой, минимальное количество компонентов — два. Обязательными являются основной номер версии (Major version), в данном примере число 6 и дополнительный номер версии (Minor version) сборки число 1.

Чтобы получить любое из этих двух значений программно, можно использовать следующий код

И так мы смогли определить версию Windows и получили оба числа номера версии. Теперь можно воспользоваться специальной таблицей и получить маркетинговое имя операционной системы.

Версия Имя
5.1 Windows Xp 32x
5.2 Windows Xp 64x
6.0 Windows Vista
6.1 Windows 7
6.2 Windows 8

Всё это можно выполнить и программным путём

Вместо if else можно использовать конструкцию switch case, если она вам больше нравится.

Код работает, но есть один нюанс. Операционные системы Windows могут быть нескольких типов: серверные (Server) Windows Server 2003, 2008, 2012 и так называемые рабочие станции (Workstation) xp, 7, 8.

Если выполнить наш код в одной из серверных версии ос, например в Windows Server 2012, то в результате получим Windows 8. Как видно на картинке ниже, это происходит, потому что основной и дополнительный номер версии у рабочих станций и сервера совпадает.


Codeby.net совместно с PHDays 8

Объявляют о проведении грандиозного конкурса с умопомрачительными призами ! Получи бесплатно билет на PHDays 8, деньги, футболку с символикой codeby, а так же всеобщий респект и уважение. Подробнее ...

Версия Workstation Server
5.1 Windows Xp 32x
5.2 Windows Xp 64x Windows Server 2003
6.0 Windows Vista Windows Server 2008
6.1 Windows 7 Windows Server 2008 R2
6.2 Windows 8 Windows Server 2012

Тогда возникает вопрос, как можно определить, что перед нами рабочая станция, а не сервер?

Добавим в наш исходник ещё одну проверку, которая будет находить в реестре ключ ProductType и получать одно из его значений.

Значения ключа
WinNT рабочая станция
LanmanNT контролер домена
ServerNT Сервер

Если Вы не знаете, что такое реестр Windows и как с ним работать, то можете прочитать статью Работа с реестром Windows.

Вызов

С помощью реестра так же можно и сразу же определить имя операционной системы, не используя никаких дополнительных проверок.

Так как переменная name содержит строку вида

или

А не просто xp, 7 или 8, то применяем метод contains, который позволяет определить содержится ли нужное нам значение в строке.

Так же с помощью этого кода можно получить и другие полезные значения, заменив ключ ProductName, например на PathName, тогда получим путь, куда установлена операционная система Windows или на ProductId, тогда получим ключ продукта. Все остальные доступные значения можно найти в реестре, пройдя по указанному пути вручную.

Читайте также:


Наш канал в telegram канал codeby

Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде !  Подробнее ...

Похожие темы

Программирование для хакеров — 2... Тут начинали переводить статьи из цикла "программирование для хакеров": Введение. Ну а я продолжу. Однако, мой перевод будет невероятно вольным, а...
c# Создание веб-сервера с помощью класса HttpListe... Как создать веб-сервер с помощью класса HttpListener? В этой небольшой статье рассмотрим на простом примере, как создать веб-сервер с помощью языка c...
c# Как выделить диапазон ячеек в DataGridView?... Выделение диапазона ячеек в DataGridView В этой небольшой статье хочу показать на простом примере, как можно программно выделить диапазон ячеек в эле...
Как написать свой V-Encryptor с самоудалением на С... Сегодня я покажу как написать простой и уже опробованный в разных местах шифровальщик (не детектится антивирусами), который после завершения процесс...
Хакерские плагины для Chrome Это аналог статьи «Хакерские плагины для Firefox», т. е. если вы пользуетесь Firefox (а не Chrome), то вы знаете что делать. Вс...