使用這個函數對象:訪問從對象集合
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參考資料),我真的不明白。 是否GetEnumerable()
返回索引集合?
你可以在'foreach'裏面使用'break statement'嗎? –
使用'foreach'獲取一個項目,然後使用'break'並不是一個好主意,因爲'foreach'用於迭代多個項目。稍後嘗試維護代碼時,這可能會有點混淆。 – Steve
因此'ManagementObjectCollection'實現了IEnumerable接口的非泛型版本嗎? – Grzenio