Windows Management Instrumentation. Опрос свойств, методов и описателей. Разработка компонента WMIControl

Страницы работы

Содержание работы

Windows Management Instrumentation

При чтении этого документа установите для стиля Обычный один из следующих шрифтов: Palatino Linotype, Franklin Gothic Book, Segoe UI или Sylfaen.

С точки зрения пользователя Windows Management Instrumentation (WMI) — это инфраструктура управления операционной системой, использующая стандартный объектно-ориентированный интерфейс. С точки зрения программиста WMI — это семейство классов и API-функций, позволяющее получать общую информацию о системе и управлять ею. API-функции WMI позволяют разрабатывать системные утилиты (system tools), которые помогают администратору производить мониторинг компьютерной системы, организовывать работу в ней и управлять критически важными параметрами в режиме реального времени.

Visual Studio .NET и Microsoft .NET Framework SDK предоставляют множество API-функций и классов, которое значительно упрощает разработку системных утилит, а также позволяет управлять распределенными приложениями. При управлении ими WMI использует технологию DCOM (Distributed Component Object Model) со специализированным маршалингом параметров. Это делается для повышения эффективности управления.

С помощью WMI ваше приложение может определить тип операционной системы (включая номер service pack), количество процессоров, запущенные сервисы, открытые сетевые соединения, каким доменам доверяет (in trust relationship) локальный домен host-компьютера. Вы можете запустить или остановить процесс или сервис, управлять доступностью дисков, рекурсивно выгрузить все Web-приложения из произвольной виртуальной директории IIS (Internet Information Services). Все это согласуется с правами клиента WMI.

WMI возбуждает множество событий, подписавшись на которые, вы можете эффективно реагировать на них и обрабатывать возникающие ситуации. Например, можно создать событие (и реакцию на него), заключающееся в том, что количество свободного места на диске упало ниже заданного уровня, или когда процесс пытается захватить больше памяти, чем предусмотрено его правами.

WMI поддерживает специальный язык запросов — Windows Management Instrumentation Query Language (WQL), который является подмножеством языка SQL (Structured Query Language). Например, запрос: "Выдать список процессов, потребляющих более 10 Mb памяти, выглядит так:

Select * from Win32_Process where WorkingSetSize >= 10485760

WMI предоставляет клиентам набор классических COM-интерфейсов и вы можете работать с ними по правилам COM, заручившись поддержкой пространства имен .NET COM Interop. Но значительно более удобно работать без помощи технологии COM, так как .NET Framework имеет специальное пространство имен — System.Management, объекты которого предоставляют интуитивно-ясный интерфейс и позволяют работать с многочисленными данными и событиями.

Центральным классом в этом пространстве именявляется ManagementObject. Он инкапсулирует общую функциональность данных произвольного характера. Например, мы хотим узнать какой размер в гигабайтах имеет наш диск (в магазине он продавался как диск размером в 360 Гб). Для этого достаточно выполнить следующий фрагмент.

ManagementObject mo = new ManagementObject("Win32_LogicalDisk.DeviceID='C:'");

mo.Get();

Console.WriteLine("Logical Disk Size = {0:f1} Gb", (ulong)mo["Size"] / (1024.0 * 1024 * 1024));

Вы можете поместить этот фрагмент кода в функцию Main любого консольного проекта C#, но для того, чтобы он заработал, недостаточно добавить директиву:

using System.Management;

Пространство имен System.Management будет доступным лишь после того, как вы добавите ссылку на System.Management.dll. Для этого выберите команду Add Reference в контекстном меню узла Reference, который расположен внутри дерева компонентов текущего проекта (см. окно Solution Explorer), найдите DLL и добавьте ссылку. После этого фрагмент должен работать. В моем случае он вывел в такой результат:

Logical Disk Size = 341,8 Gb

Другим важным классом пространства имен Management является класс ManagementObjectSearcher. Он позволяет получить коллекцию данных с помощью запроса на языке WQL. Например, для того, чтобы получить список всех сервисов, которые стартовали в данной системе, можно использовать такой запрос:

ManagementObjectSearcher searcher = new ManagementObjectSearcher(

"Select * from Win32_Service where Started = TRUE");

foreach (ManagementObject mo in searcher.Get())

Console.WriteLine ("Service: {0},  State: {1} ", mo["Caption"], mo["State"]);

Ответом системы будет список, строки которого имеют примерно такой вид:

Service: DHCP-клиент,  State: Running

Service: Windows Presentation Foundation Font Cache 4.0.0.0,  State: Stopped

Следующий фрагмент обходится без помощи класса ManagementObjectSearcher. Он пользуется услугами другого класса пространства имен Management — класса ManagementClass. Этот класс, производный от ManagementObject, позволяет создать, или скорее выбрать так называемый класс WMI.

Похожие материалы

Информация о работе