Начал изучать 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 и все стопорится, пошагово команды больше не выполняются.