Есть код вывода информации о процессах в массив:
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.
Комментариев нет:
Отправить комментарий