Собираем информацию о системе с помощью WMI и CSharp (часть I)…
Март 11, 2007 — seregaborzovТехнология 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 + 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




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