0

我正在尝试查找我识别的用户是否是本地管理员组的成员。

但是我的代码什么也没做...

请看我下面的代码。

此外,这是在我的程序中执行的,public void Form1_Load(object sender, EventArgs e) {}因此每次在应用程序启动时都会执行。

        string localUser = WindowsIdentity.GetCurrent().Name.ToString();
        char[] trimmingsEnd = { 'a', 'd', 'm', 'i', 'n' };
        string trimmedlocalEnd = localUser.TrimEnd(trimmingsEnd);
        char[] trimmingsFront = { 'C', 'o', 'm', 'p', 'u', 't', 'e', 'r', '\\' };
        string trimmedlocalUser = trimmedlocalEnd.TrimStart(trimmingsFront);

        WindowsIdentity windowsIdentity = new WindowsIdentity(trimmedlocalUser);
        WindowsPrincipal principal = new WindowsPrincipal(windowsIdentity);
        bool IsAdmin = principal.IsInRole("BUILTIN\\" + "Administrators");
             if (IsAdmin == false)
                 MessageBox.Show("not part of admin");
             if (IsAdmin == true)
                 MessageBox.Show("part of admin");
4

2 回答 2

0

如果程序编译没有任何问题,那么可能是没有为 Form1_Load() 设置事件处理程序。

您可能需要在 Form1.Designer.cs 文件中添加如下内容:

this.Load += new System.EventHandler(Form1_Load);

让我知道这是否有帮助。

于 2014-10-24T01:51:08.770 回答
0

所以,我放弃了上面的方法,因为我只能找到当前用户......但我需要在本地管理员组中搜索两个用户名。

下面的代码完美地满足了我的需要!希望这可以帮助某人。

//Get all users from the local Administrators group and create list
            DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName);
            DirectoryEntry admGroup = localMachine.Children.Find("administrators", "group");
            object members = admGroup.Invoke("members", null);
            List<string> userList = new List<string>();
//Get current user
            string localUser1 = WindowsIdentity.GetCurrent().Name.ToString();
//Take domain name off
            char[] trimmingsFront = { 'D', 'O', 'M', 'A', 'I', 'N', '\\' };
            string trimmedlocalFront = localUser1.TrimStart(trimmingsFront);
//Take "admin" off username
            char[] trimmingsEnd = { 'a', 'd', 'm', 'i', 'n' };
            string trimmedlocalUser = trimmedlocalFront.TrimEnd(trimmingsEnd);
//Add each local Administrator to list
            foreach (object groupMember in (IEnumerable)members)
            {
                DirectoryEntry member = new DirectoryEntry(groupMember);
                userList.Add(member.Name);
            }
//Check if users are not part of list
            if (!(userList.Contains(trimmedlocalFront)))
                MessageBox.Show(trimmedlocalFront + " is not a member of the local Administrators group. The drag and drop functionality will not work unless " + trimmedlocalFront + " is a member of the local Administrators group. After " + trimmedlocalFront + " is added, please restart your machine for the changes to take effect.", "Local Administrator Warning", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            else if (!(userList.Contains(trimmedlocalUser)))
                MessageBox.Show(trimmedlocalUser + " is not a member of the local Administrators group. The drag and drop functionality will not work unless " + trimmedlocalUser + " is a member of the local Administrators group. After " + trimmedlocalUser + " is added, please restart your machine for the changes to take effect.", "Local Administrator Warning", MessageBoxButtons.OK, MessageBoxIcon.Stop);

如果您想检查您自己的用户名,对于“if”,请执行以下操作:

if (!(userList.Contains(whateverusernameyouwanttosearch)))
于 2014-11-01T01:57:33.240 回答