Найти, если указанный пользователь (строка) является членом локальной группы администраторов
Я пытаюсь выяснить, является ли пользователь, которого я идентифицирую, членом локальной группы администраторов.
Но мой код ничего не делает...
Пожалуйста, смотрите мне код ниже.
Кроме того, это выполняется в моем 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");
2 ответа
Итак, я отказался от описанного выше метода, так как все, что я мог найти, это текущий пользователь... но мне нужно было найти два имени пользователя в группе локальных администраторов.
Следующий код отлично работает для того, что мне нужно! Надеюсь, это кому-нибудь поможет.
//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)))
Если программа компилируется без каких-либо проблем, возможно, обработчик событий не настроен для Form1_Load().
Возможно, вам придется добавить в файл Form1.Designer.cs что-то вроде:
this.Load += new System.EventHandler(Form1_Load);
Позвольте мне знать, если это помогает.