Информация о системе на C#
Всем доброго времени суток. На связи Алексей Гулынин. В данной статье я бы хотел рассказать, как получить информацию о системе, используя C#. Делать мы это будем двумя способами. Первый способ заключается в использовании класса Environment. Второй способ — это использование WMI-классов, а именно класса Win32_OperatingSystem.
Сразу приведу код:
using System; using System.IO; using System.Management; // нужно добавить ссылку using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { ShowSystemInfo(); ShowSystemInfoFromWMI(); Console.WriteLine("Нажмите клавишу для продолжения"); Console.ReadLine(); } public static void ShowSystemInfo() { Console.WriteLine("Операционная система (номер версии): {0}", Environment.OSVersion); Console.WriteLine("Разрядность процессора: {0}", Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE")); Console.WriteLine("Модель процессора: {0}", Environment.GetEnvironmentVariable("PROCESSOR_IDENTIFIER")); Console.WriteLine("Путь к системному каталогу: {0}", Environment.SystemDirectory); Console.WriteLine("Число процессоров: {0}", Environment.ProcessorCount); Console.WriteLine("Имя пользователя: {0}", Environment.UserName); // Локальные диски Console.WriteLine("Локальные диски: "); foreach (DriveInfo dI in DriveInfo.GetDrives()) { Console.Write( "\t Диск: {0}\n\t" + " Формат диска: {1}\n\t " + "Размер диска (ГБ): {2}\n\t Доступное свободное место (ГБ): {3}\n", dI.Name, dI.DriveFormat, (double)dI.TotalSize / 1024 / 1024 / 1024, (double)dI.AvailableFreeSpace / 1024 / 1024 / 1024); Console.WriteLine(); } } // Здесь для работы со строками будем использовать класс StringBuilder public static void ShowSystemInfoFromWMI() { StringBuilder systemInfo = new StringBuilder(); ManagementClass manageClass = new ManagementClass("Win32_OperatingSystem"); // Получаем все экземпляры класса ManagementObjectCollection manageObjects = manageClass.GetInstances(); // Получаем набор свойств класса PropertyDataCollection properties = manageClass.Properties; foreach (ManagementObject obj in manageObjects) { foreach (PropertyData property in properties) { try { systemInfo.AppendLine(property.Name + ": " + obj.Properties[property.Name].Value.ToString()); } catch { } } systemInfo.AppendLine(); } Console.WriteLine(systemInfo); } } }
Думаю, что вопросов по методу ShowSystemInfo() возникнуть не должно. Единственное отмечу, что размер дисков представлен в байтах. В примере мы всё переводим в ГБ.
Остановимся подробнее на работе метода ShowSystemInfoFromWMI().
ManagementClass — это класс WMI, т.е. некий контейнер, в котором хранится информации. В Windows таких классов очень много. Приведу некоторые примеры: Win32_LocalTime, Win32_DiskDrive, Win32_Process, Win32_Processor. Также можно создавать свои классы.
Конструкцию try catch добавляем так как может возникнуть исключение NullReferenceException. Оно возникает из-за того, что значения некоторых свойств заданы как NULL.
Для работы с WMI в системе Windows есть утилита wbemtest.exe. Перейти в неё можно с помощью команды "Выполнить" (Win + R):
Далее подключаем пространство имен "root\cimv2":
"Классы" — "Рекурсивное вхождение" — "OK":
Выбираем класс "Win32_OperatingSystem":
Здесь мы видим значения свойств объекта класса "Win32_OperatingSystem":
В данной статье вы научились получать информацию о системе, используя C#.
На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.