Страницы

Поиск по вопросам

вторник, 4 июня 2019 г.

Непонятная реакция при использовании методов Win32_Process (WinForms)

Есть код вывода информации о процессах в массив:
var process = new StringBuilder(); ManagementObjectSearcher searcherProc = new ManagementObjectSearcher("root\\CIMV2", "Select Name, CommandLine From Win32_Process"); foreach (ManagementObject instance in searcherProc.Get()) { process.AppendLine(string.Format("Процесс: {0}", instance["Name"])); } /*foreach (System.Diagnostics.Process winProc in System.Diagnostics.Process.GetProcesses()) { processi.AppendLine(string.Format("Процесс: {0}, Имя: {1}.exe", winProc.Id, winProc.ProcessName, )); }*/ show_information(process.ToString());
Из методов работает только Name. При использовании Caption или OSName компилятор выдает ошибку:
Как можно исправить ошибку, или другими средствами языка вывести информацию о процессах (всех запущенных): Имя, ID, Путь, Память?


Ответ

В своём запросе:
Select Name, CommandLine From Win32_Process
Вы выбираете только поля Name и CommandLine. Соответственно получить значения полей Caption и OSName вы не сможете - вы их попросту не выбирали.
В внутреннем исключении об этом и сказано, но вы в него видимо не заглядывали.
Просто добавьте в запрос необходимые поля.

Без WMI информацию указанную вами информацию можно было бы получить, например, перебрав Process.GetProcesses():
var info = from process in Process.GetProcesses() select new { process.ProcessName, process.Id, process.WorkingSet64};
Но к сожалению, информацию о коммандной строке вы так не получите - если она нужна, то всё же придется прибегнуть к помощи WMI.

Комментариев нет:

Отправить комментарий