2014-10-24 5 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

위와 같은 방법으로 현재 사용자를 찾을 수 있었지만 로컬 관리자 그룹에서 두 개의 사용자 이름을 검색해야했습니다.

다음 코드는 내가 필요로하는 것을 위해 완벽하게 작동했습니다! 희망이 있으면 도움이됩니다. 그것은로드

if (!(userList.Contains(whateverusernameyouwanttosearch))) 
0

프로그램이 아무 문제없이 컴파일되는 경우 이벤트 처리기가 Form1_Load()에 대해 설정되지 않았을 수 있습니다.

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

이 도움이되는지 알려주세요 : 당신은 Form1.designer.cs입니다 추가 할 수 있습니다

는 같은 파일.

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

당신이 할 '경우'에 대한 자신의 사용자 이름을 확인하려면

. 설정 및 UAC 검사기와 같은 다른 항목이 있으며 오류없이 정상적으로로드됩니다. – crlic306

+0

답변을 편집하고 코드 앞에 4 칸을 추가하면 코드 형식으로 표시됩니다. 스택 오버플로에 오신 것을 환영합니다! – DanM7

+0

DanM :) –