2014-10-24 7 views
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"); 

ответ

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 (!(userList.Contains(whateverusernameyouwanttosearch))) 
0

Если программа компилирует без каких-либо проблем, то это может быть, что обработчик событий не настроен для Form1_Load().

Вы, возможно, придется добавить к Form1.Designer.cs файл что-то вроде:

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

Позвольте мне знать, если это помогает.

+0

Он загружается ... хорошо должно быть. У меня есть другие элементы, такие как «Настройки» и «Проверка UAC», и они загружаются без ошибок. – crlic306

+0

Если вы отредактируете свой ответ и добавите 4 пробела перед своим кодом, он будет отформатирован как код. Добро пожаловать в переполнение стека! – DanM7

+0

Спасибо DanM :) –