积极答复者
c#获取进程用户名

问题
答案
-
using System.Diagnostics; using System.Management; private static string GetProcessUserName(int pID) { string text1 = null; SelectQuery query1 = new SelectQuery("Select * from Win32_Process WHERE processID=" + pID); ManagementObjectSearcher searcher1 = new ManagementObjectSearcher(query1); try { foreach (ManagementObject disk in searcher1.Get()) { ManagementBaseObject inPar = null; ManagementBaseObject outPar = null; inPar = disk.GetMethodParameters("GetOwner"); outPar = disk.InvokeMethod("GetOwner", inPar, null); text1 = outPar["User"].ToString(); break; } } catch { text1 = "SYSTEM"; } return text1; } private void button1_Click(object sender, EventArgs e) { foreach (Process p in Process.GetProcesses()) { Console.Write(p.ProcessName); MessageBox.Show(p.ProcessName + "---" + GetProcessUserName(p.Id)); } }
努力+方法=成功- 已标记为答案 肖小勇Moderator 2010年4月8日 1:55
-
using System.Diagnostics; using System.Management; private static string GetProcessUserName(int pID) { string text1 = null; SelectQuery query1 = new SelectQuery("Select * from Win32_Process WHERE processID=" + pID); ManagementObjectSearcher searcher1 = new ManagementObjectSearcher(query1); try { foreach (ManagementObject disk in searcher1.Get()) { ManagementBaseObject inPar = null; ManagementBaseObject outPar = null; inPar = disk.GetMethodParameters("GetOwner"); outPar = disk.InvokeMethod("GetOwner", inPar, null); text1 = outPar["User"].ToString(); break; } } catch { text1 = "SYSTEM"; } return text1; } private void button1_Click(object sender, EventArgs e) { foreach (Process p in Process.GetProcesses()) { Console.Write(p.ProcessName); MessageBox.Show(p.ProcessName + "---" + GetProcessUserName(p.Id)); } }
努力+方法=成功你好!
上面的方法能正确获取到用户名。
知识改变命运,奋斗成就人生!- 已标记为答案 漫步者 2010年4月8日 7:58
-
你好!
我查了一下资料并没有找到其它可以得到用户名的方式。我把上面的过程优化了一下,效率提高了一倍多,希望对你有帮助。
class ProcessInfo { public string Id { get; set; } public string Name { get; set; } public string UserName { get; set; } public ProcessInfo(string id, string name, string userName) { this.Id = id; this.Name = name; this.UserName = userName; } } static void Main(string[] args) { DateTime begin = DateTime.Now; List<ProcessInfo> processInfoCollection = new List<ProcessInfo>(); ManagementObjectCollection queryCollection = new ManagementObjectSearcher("SELECT * FROM Win32_Process").Get(); foreach (ManagementObject mo in queryCollection) { ManagementBaseObject inPar = mo.GetMethodParameters("GetOwner"); ; ManagementBaseObject outPar = mo.InvokeMethod("GetOwner", inPar, null); string userName = (outPar["User"] == null) ? string.Empty : outPar["User"].ToString(); processInfoCollection.Add(new ProcessInfo(mo["ProcessID"].ToString(), mo["Name"].ToString(), userName)); } foreach (ProcessInfo p in processInfoCollection) { Console.WriteLine("ProcessID : {0}", p.Id); Console.WriteLine("ProcessName : {0}", p.Name); Console.WriteLine("ProcessUserName: {0}", p.UserName); Console.WriteLine(); } Console.WriteLine("CostSeconds: {0}", (DateTime.Now - begin).TotalSeconds.ToString("f2")); Console.ReadKey(); }
知识改变命运,奋斗成就人生!- 已标记为答案 漫步者 2010年4月8日 14:07
全部回复
-
using System.Diagnostics; using System.Management; private static string GetProcessUserName(int pID) { string text1 = null; SelectQuery query1 = new SelectQuery("Select * from Win32_Process WHERE processID=" + pID); ManagementObjectSearcher searcher1 = new ManagementObjectSearcher(query1); try { foreach (ManagementObject disk in searcher1.Get()) { ManagementBaseObject inPar = null; ManagementBaseObject outPar = null; inPar = disk.GetMethodParameters("GetOwner"); outPar = disk.InvokeMethod("GetOwner", inPar, null); text1 = outPar["User"].ToString(); break; } } catch { text1 = "SYSTEM"; } return text1; } private void button1_Click(object sender, EventArgs e) { foreach (Process p in Process.GetProcesses()) { Console.Write(p.ProcessName); MessageBox.Show(p.ProcessName + "---" + GetProcessUserName(p.Id)); } }
努力+方法=成功- 已标记为答案 肖小勇Moderator 2010年4月8日 1:55
-
using System.Diagnostics; using System.Management; private static string GetProcessUserName(int pID) { string text1 = null; SelectQuery query1 = new SelectQuery("Select * from Win32_Process WHERE processID=" + pID); ManagementObjectSearcher searcher1 = new ManagementObjectSearcher(query1); try { foreach (ManagementObject disk in searcher1.Get()) { ManagementBaseObject inPar = null; ManagementBaseObject outPar = null; inPar = disk.GetMethodParameters("GetOwner"); outPar = disk.InvokeMethod("GetOwner", inPar, null); text1 = outPar["User"].ToString(); break; } } catch { text1 = "SYSTEM"; } return text1; } private void button1_Click(object sender, EventArgs e) { foreach (Process p in Process.GetProcesses()) { Console.Write(p.ProcessName); MessageBox.Show(p.ProcessName + "---" + GetProcessUserName(p.Id)); } }
努力+方法=成功你好!
上面的方法能正确获取到用户名。
知识改变命运,奋斗成就人生!- 已标记为答案 漫步者 2010年4月8日 7:58
-
你好!
我查了一下资料并没有找到其它可以得到用户名的方式。我把上面的过程优化了一下,效率提高了一倍多,希望对你有帮助。
class ProcessInfo { public string Id { get; set; } public string Name { get; set; } public string UserName { get; set; } public ProcessInfo(string id, string name, string userName) { this.Id = id; this.Name = name; this.UserName = userName; } } static void Main(string[] args) { DateTime begin = DateTime.Now; List<ProcessInfo> processInfoCollection = new List<ProcessInfo>(); ManagementObjectCollection queryCollection = new ManagementObjectSearcher("SELECT * FROM Win32_Process").Get(); foreach (ManagementObject mo in queryCollection) { ManagementBaseObject inPar = mo.GetMethodParameters("GetOwner"); ; ManagementBaseObject outPar = mo.InvokeMethod("GetOwner", inPar, null); string userName = (outPar["User"] == null) ? string.Empty : outPar["User"].ToString(); processInfoCollection.Add(new ProcessInfo(mo["ProcessID"].ToString(), mo["Name"].ToString(), userName)); } foreach (ProcessInfo p in processInfoCollection) { Console.WriteLine("ProcessID : {0}", p.Id); Console.WriteLine("ProcessName : {0}", p.Name); Console.WriteLine("ProcessUserName: {0}", p.UserName); Console.WriteLine(); } Console.WriteLine("CostSeconds: {0}", (DateTime.Now - begin).TotalSeconds.ToString("f2")); Console.ReadKey(); }
知识改变命运,奋斗成就人生!- 已标记为答案 漫步者 2010年4月8日 14:07