我就想通过指定的 pid 获取到 指定进程的用户名 请问下要怎么写好一点。。我整个流程就是 1 获取指定进程的pid  2 查询出进程的用户名 3 验证用户名是否为 administrator4 关闭进程 我现在就第二部不会做。。  求高手 ~~~

解决方案 »

  1.   

    项目添加对 System.Management.dll 的引用
    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;
    }
      

  2.   


    这在网上也有看过。。 可是有很多读不懂的地方。。这个好像是获取到全部进程的 用户名  我想要指定pid查询 可是我把指定的pid弄上去又查询不到求解现在最大的问题就是查询不到指定pid 的进程用户名..
      

  3.   

    就问题就是。。 怎样将pid 赋值
      

  4.   

    方法里不是有参数 pID 吗,里面的代码也使用到了 pID ,返回的也是 string ,哪里是 全部进程的用户名 ?
      

  5.   

       SelectQuery query1 = new SelectQuery("Select * from Win32_Process WHERE processID=" + pID);   
    这句是什么意思。。
      

  6.   

    SelectQuery query1 = new SelectQuery("Select * from Win32_Process WHERE processID=" + pID);   
    这句是什么意思。。
      

  7.   

    一个查询语句啊,就像数据库有sql语句
      

  8.   

    可是为什么我直接赋值给pid也不行。。
      

  9.   

    什么直接赋值给pid ,你是调用这个方法还是把方法拆开了嵌入到你的代码里?
      

  10.   

    你就把这个方法放到你的程序里,从任务管理器里挑一个进程把 pid 作为参数调用这个方法,看返回值是不是和任务管理中的用户名相同