Как определить версию 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. Как видно на картинке ниже, это происходит, потому что основной и дополнительный номер версии у рабочих станций и сервера совпадает.



Версия 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, тогда получим ключ продукта. Все остальные доступные значения можно найти в реестре, пройдя по указанному пути вручную.

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


Проект codebyOS

Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

Похожие темы

c# Как изменить данные в базе данных MySQL?... Изменение данных в базе данных MySQL В этой статье мы рассмотрим на нескольких простых примерах, как изменить данные в базе данных MySQL с помощью яз...
Эмуляция сети из нескольких компьютеров на одном к... Эта инструкция небольшая, но очень полезная. Она пригодится: тестировщикам на проникновение и хакерам: для сканирования с одной операционной си...
SAMRi10 — контрразведывательный инструмент W... Контрразведывательный инструмент Windows: SAMRi10 Инструмент «SAMRi10» - это короткий сценарий PowerShell (PS), который изменяет разрешения по ум...
Apache 2.4 VC14: новый компилятор и другие изменен... Apache Lounge компилирует для нас, точнее для операционной системы Windows, актуальные бинарники веб-сервера Apache. Делают они это уже более десяти...
Control WebBrowser. Часть 2: События Control WebBrowser. Часть 2: События В предыдущей статье было продемонстрировано, как получить данные в виде html страницы и вывести их в окно элемен...