#c_sharp #net
Есть код вывода информации о процессах в массив: 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, Путь, Память?
Ответы
Ответ 1
В своём запросе: 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.
Комментариев нет:
Отправить комментарий