请教各位大虾。如何判断下断代码中的pr是属于哪个windows用户。比如是administrator用户还是SYSTEM用户
请各位大虾不吝赐教谢谢foreach (Process pr in Process.GetProcesses())
            {
                if (pr.ProcessName == txtFileName.Text)
                {
                    flag = true;
                    return;
                    
                }
            }

解决方案 »

  1.   

    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));            }        }
      

  2.   

    方法一:使用WMI获取public static string GetProcessInfoByPID(int PID, out string User, out string Domain)
    {
        User = String.Empty;
        Domain = String.Empty;
        OwnerSID = String.Empty;
        string processname = String.Empty;
        try
        {
            ObjectQuery sq = new ObjectQuery
                ("Select * from Win32_Process Where ProcessID = '" + PID + "'");
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(sq);
            if (searcher.Get().Count == 0)
                return OwnerSID;
            foreach (ManagementObject oReturn in searcher.Get())
            {
                string[] o = new String[2];
                //Invoke the method and populate the o var with the user name and domain
                oReturn.InvokeMethod("GetOwner", (object[])o);            //int pid = (int)oReturn["ProcessID"];
                processname = (string)oReturn["Name"];
                //dr[2] = oReturn["Description"];
                User = o[0];
                if (User == null)
                    User = String.Empty;
                Domain = o[1];
                if (Domain == null)
                    Domain = String.Empty;
                string[] sid = new String[1];
                oReturn.InvokeMethod("GetOwnerSid", (object[])sid);
                OwnerSID = sid[0];
         return OwnerSID;
            }
        }
        catch
        {
            return OwnerSID;
        }
        return OwnerSID;
    }方法二:WIN32API获取,看这里:
    http://www.codeproject.com/KB/cs/processownersid.aspx