wmi информация о софте
От: TSEO  
Дата: 09.07.08 11:03
Оценка:
Начал изучать WMI. Используя примеры — получил инормацию о логических дисках.

outTextRichTextBox.Text = "Информация о логических дисках:\n\n";
            try
            {
                // сначала нам необходимо создать объект - запрос.
                System.Management.ObjectQuery diskQuery = new System.Management.ObjectQuery("select FreeSpace,
FileSystem, Size, Name, VolumeName, VolumeSerialNumber from Win32_LogicalDisk where DriveType = 3");
                // Искатель информации, приближенный аналог DataSet
                System.Management.ManagementObjectSearcher DiskSearcher = new ManagementObjectSearcher(diskQuery);
                foreach (ManagementObject diskInfo in DiskSearcher.Get())
                {
                    outTextRichTextBox.Text += "Имя диска: " + diskInfo["Name"].ToString() + "\n";
                    outTextRichTextBox.Text += "Размер диска: " + diskInfo["Size"].ToString() + "\n";
                    outTextRichTextBox.Text += "Название тома: " + diskInfo["VolumeName"].ToString() + "\n";
                    outTextRichTextBox.Text += "Файловая система: " + diskInfo["FileSystem"].ToString() + "\n";
                    outTextRichTextBox.Text += "Свободное место: " + diskInfo["FreeSpace"].ToString() + "\n";
                    outTextRichTextBox.Text += "Серийный номер тома: " + diskInfo["VolumeSerialNumber"].ToString() + "\n\n";
                }
            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }


Анлогично пытаюсь получить информацию о Софте.


outTextRichTextBox.Text = "Информация о ПО:\n\n";
            try
            {
                ConnectionOptions _Options = new ConnectionOptions();
                ManagementPath _Path = new ManagementPath(String.Format("\\\\{0}\\root\\cimv2", "127.0.0.1"));
                ManagementScope _Scope = new ManagementScope(_Path, _Options);
                _Scope.Connect();
                ObjectQuery oQuery = new ObjectQuery("Select * from Win32_Product");
                ManagementObjectSearcher managerTemp = new ManagementObjectSearcher(_Scope, oQuery);
                ManagementObjectCollection col = managerTemp.Get();

                foreach (object objTemp2 in col)
                {
                    ManagementObject oReturn = (ManagementObject)objTemp2;
                    outTextRichTextBox.Text += oReturn["Caption"].ToString();
                    outTextRichTextBox.Text += oReturn["Description"].ToString();
                    outTextRichTextBox.Text += oReturn["Version"].ToString();
                }
            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }


Но приложение зависает — исключения нет. Что это может быть, в чем ошибка? При отладке — приложение виснет в цикле foreach — на ключевом слове in и все стопорится, пошагово команды больше не выполняются.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.