利用WMI,如何高效获得系统进程的用户名?高分求教!
我用这种方法得到相应进程的相关信息,其中用InvokeMethod()的方法得到进程用户名,但是效率相对太低(要多执行近1秒),希望高手提供一个效率高的方法得到这个项,最好用WQL直接查询。
ManagementObjectCollection processBase = WmiQuery( "* ", "Win32_Process ");
foreach(ManagementObject obj in processBase)
{
Console.Write(obj.Properties[ "ProcessID "].Value.ToString());
Console.Write(obj.Properties[ "Name "].Value.ToString());
if (obj.Properties[ "ProcessID "].Value.ToString() != "0 ")
{
object user = obj.InvokeMethod( "GetOwner ", null, new InvokeMethodOptions(null, TimeSpan.MaxValue));
Console.Write(((ManagementBaseObject)user).Properties[ "User "].Value.ToString());
}
else
Console.Write( "SYSTEM ");
Console.Write(bufferTable[obj.Properties[ "ProcessID "].Value.ToString()].ToString());
Console.WriteLine(obj.Properties[ "WorkingSetSize "].Value.ToString());
}
其中:protected ManagementObjectCollection WmiQuery(string sltItems, string sltTarget)
{
ManagementObjectSearcher mSearCher = new ManagementObjectSearcher();
mSearCher.Scope = new ManagementScope(@ "\\localhost\root\cimv2 ");
mSearCher.Query = new ObjectQuery(string.Format( "select {0} from {1} ", sltItems, sltTarget));
return mSearCher.Get();
}
------解决方案--------------------http://www.codeproject.com/cs/system/wmi.asp