Страницы

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

воскресенье, 15 марта 2020 г.

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

#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.

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

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