Использование этой функции:Доступ один объект из коллекции объекта
public bool CheckCallerStatus(string stConsumerName)
{
SelectQuery selectQuery = new SelectQuery("select ExecutablePath from Win32_Process where name='" +
stConsumerName + "'");
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(selectQuery))
{
ManagementObjectCollection moc = searcher.Get();
if (moc.Count > 1)
{
return true; // OK process is running
}
return false;
}
}
я могу проверить, является ли процесс, принятый в качестве stConsumerName
, является активным процессом (я использую moc.Count > 1
и не moc.Count > 0
, потому что я звоню из процесса, который я наблюдаю, и пытаюсь увидеть, есть ли другие активные процессы помимо него). Каждый экземпляр моего процесса хранится как объект в ManagementObjectCollection moc
.
Теперь я хочу получить путь к процессу. Я считаю, что эта информация хранится в объекте в moc
и простой foreach
, например, так:
string stFilePath = Empty.String;
foreach (ManagementObject process in moc)
{
stFilePath = process["ExecutablePath"].ToString();
}
возвратит path
сторицей.
Как вы можете видеть, что я храню значение process["ExecutablePath"]
к string
(а не к List
или array
или сконвертировано), потому что я только заботиться о пути первого процесса (я предполагаю, что все процессы, возвращаемые в moc
- мой процесс [имя достаточно уникально]).
Мой Вопрос: Как получить доступ к любому один объект в ManagementObjectCollection
? Такое, что я могу установить stFilePath = process["ExecutablePath"];
Так как moc
не поддерживает индексацию, moc.First()
или moc.Single()
не поможет.
И связанный с ним вопрос: У ManagementObjectClass есть метод GetEnumerable()
. Я просмотрел (и, конечно, в MSDN Reference), и я действительно не понимаю. GetEnumerable()
вернуть индексированную коллекцию?
Можете ли вы использовать выражение'break 'внутри'foreach'? –
Использование 'foreach' для получения одного элемента, а затем с использованием' break' - не очень хорошая идея, так как 'foreach' используется для повторения нескольких элементов. Это может быть немного запутанным при попытке сохранить код позже. – Steve
Итак, 'ManagementObjectCollection' реализует не-общую версию интерфейса' IEnumerable'? – Grzenio