利用WMI,如何高效获得系统进程的用户名?高分求教!

pk_ricky 2007-03-28 07:43:32
我用这种方法得到相应进程的相关信息,其中用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();
}
...全文
271 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Rick1984 2007-04-04
  • 打赏
  • 举报
回复
http://www.codeproject.com/cs/system/wmi.asp
pk_ricky 2007-03-29
  • 打赏
  • 举报
回复
UP
llyzcy 2007-03-28
  • 打赏
  • 举报
回复
up
lovelyxinxin_1983 2007-03-28
  • 打赏
  • 举报
回复
非要WMI么,为什么不用ProcessInfo呢?
pk_ricky 2007-03-28
  • 打赏
  • 举报
回复
自己先顶!

110,502

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧