Информация о системе на 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#.
На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.




