Собираем информацию о системе с помощью WMI и CSharp (часть I)…

Технология WMI (Windows Management Instrumentation) является средством поддержки управления Windows. Строго, говоря WMI - это подпрограммы, позволяющие драйверам публиковать информацию о своих рабочих характеристиках и конфигурации, а так же получать команды от службы WMI. К примеру собрать информацию о физических дисках можно создав скрипт на VBScript:

 

strComputer = "."

WScript.Echo "Физические диски:"

set objWMI = GetObject("winmgmts:\" & strComputer & "rootcimv2")

set colDisks = objWMI.ExecQuery("select * from Win32_DiskDrive")

for each objDisk in colDisks

WScript.Echo " Заголовок: " & vbTab & objDisk.Caption

WScript.Echo " ID устройства: " & vbTab & objDisk.DeviceID

WScript.Echo " Производитель: " & vbTab & objDisk.Manufacturer

WScript.Echo " Тип носителя: " & vbTab & objDisk.MediaType

WScript.Echo " Модель: " & vbTab & objDisk.Model

WScript.Echo " Имя: " & vbTab & objDisk.Name

WScript.Echo " Разделы: " & vbTab & objDisk.Partitions

WScript.Echo " Размер: " & vbTab & objDisk.Size

WScript.Echo " Состояние: " & vbTab & objDisk.Status

WScript.Echo

next

Вы наверняка заметили создание класса objWMI который содержит методы для получения информации. Подобный код можно создать на CSharp, но это будет ниже, а сейчас поговорим об архитектуре WMI.

Архитектура WMI

WMI разработан специалистами Microsoft на базе технологии управления предприятием через Web — Web-Based Enterprise Management (WBEM). WBEM — это стандарт, определенный консорциумом Distributed Management Task Force (DMTF). WBEM определяет структуру расширяемого набора данных о предприятии и возможности администрирования, необходимые для управления локальными и удаленными системами, включающими произвольные компоненты. Разработчики Microsoft реализовали WMI в Windows 98 и в Win95 OSR2, сделали его доступным для NT 4.0, начиная с Service Pack 4 (SP4), и, наконец, интегрировали в Windows 2000 и ХР.

Архитектура WMI состоит из четырех сегментов, показанных на рисунке: управляющие программы (management applications), ядро WMI (WMI infrastructure), провайдеры (providers), или поставщики, и управляемые объекты (managed objects). Управляющие программы — это приложения Windows, которые обращаются к данным и отображают или обрабатывают данные, полученные от управляемых объектов. Простой пример управляющей программы — использование технологии WMI (вместо API) в Performance Monitor. Более сложный пример — инструмент управления предприятием, который позволяет администраторам автоматически отслеживать конфигурации программного обеспечения и оборудования каждого компьютера на предприятии.

wmi

Я не буду более детально рассматривать архитектуру, а предложу Вам почитать Марка Руссиновича и тут.

WMI + CSharp = System Information

Создадим простое приложение для получения основных сведений о системе: имя машины, имя ОС, изготовитель и т.д.. Для начала создайте Console Application, а далее Solution Explorer в папке Reference добавьте пространство System.Management чтобы мы могли использовать методы для использоваиня WMI. Далее вбиваем этот код:

 

using System;

using System.Collections.Generic;

using System.Text;

using System.Management;
namespace ConsoleApplication1

{

    class Program

    {

        static void Main(string[] args)

        {

           //подключаемся к компу

            ManagementScope scope =

                new ManagementScope(

                "\\BSERVERNAME\root\cimv2");

            scope.Connect();
//создаем запрос для получение информации об операционной системы

            ObjectQuery query = new ObjectQuery(

                "SELECT * FROM Win32_OperatingSystem");

            ManagementObjectSearcher searcher =

                new ManagementObjectSearcher(scope, query);            ManagementObjectCollection queryCollection

= searcher.Get();

            foreach (ManagementObject m in queryCollection)

            {

                // имя компьютера

                Console.WriteLine("Computer Name : {0}",

                    m["csname"]);

                Console.WriteLine("Windows Directory : {0}",

                    m["WindowsDirectory"]);

                Console.WriteLine("Operating System: {0}",

                    m["Caption"]);

                Console.WriteLine("Version: {0}", m["Version"]);

                Console.WriteLine("Manufacturer : {0}",

                    m["Manufacturer"]);

            }

            //инфа о сд-приводе

            ManagementObjectSearcher searcherq = new ManagementObjectSearcher("Select Name from Win32_CDROMDrive");

            foreach (ManagementObject cdrom in searcherq.Get())

            {

                Console.WriteLine("CD-ROM Name: {0}", cdrom.GetPropertyValue("Name"));

            }

            Console.ReadKey();
//все службы            

            ManagementObjectSearcher s = new ManagementObjectSearcher("root\CIMV2", "SELECT * FROM Win32_Service", new EnumerationOptions(null, System.TimeSpan.MaxValue, 1, true, false, true, true, false, true, true));
foreach (ManagementObject service in s.Get())

            {

                // вывод службы

                Console.WriteLine(service.ToString());

            }

            Console.ReadKey();        }

    }

}

Скачать пример можно здесь

В следующей части создадим полноценное win-приложение для сбора информации о системе…

…а музыка была: Coldplay - The Hardest Part

Tags:

Опубликовано в CSharp.

Один ответ to “Собираем информацию о системе с помощью WMI и CSharp (часть I)…”

  1. Как получить список запущенных служб(сервисов)... « Блог Серёжи Борзова Says:

    [...] Posts Собираем информацию о системе с помощью WMI и CSharp (часть …Как создать логотип в стиле web 2.0…Самое плохое в [...]

Ответить