2014-08-28 97 views
0

我需要檢查當前的登錄Windows帳戶是否爲PC的管理員。如何檢查一個Windows帳戶是否是vb 2013中的pc管理員?

If My.User.IsInRole(ApplicationServices.BuiltInRole.Administrator) Then 
     'Is Admin 
    Else 
     'Isn't Admin 
    End If 

此代碼工作正常,但如果我的午餐與運行爲「另一個賬戶」的代碼不這樣做合適的工作becouse採取帳戶午餐,在登錄的代碼不是Windows帳戶的代碼。

有了這個代碼,我可以看到記錄在當前Windows用戶:

Dim Coll As ManagementObjectCollection 
    Dim LogonName As String 
    Dim GetName As New ManagementObjectSearcher("SELECT UserName FROM Win32_ComputerSystem") 
    Coll = GetName.[Get]() 
    LogonName = DirectCast(Coll.Cast(Of ManagementBaseObject)().First()("UserName"), String) 
    Dim CleanName() As String = Split(LogonName, "\") 

所以在字符串LogonName我得已登錄的Windows用戶名帳戶,但我怎麼能檢查是否是管理員?

回答

0

您可以使用System.Security.Principle命名空間來執行此任務。我寫了一個單獨的類的功能,如果你想或移動功能可以使用...

這是類...

Option Strict On 
Option Explicit On 

Imports System.Security.Principal 

Public Class SecurityClass 

#Region "Functions" 

    Public Shared Function IsAdministrator() As Boolean 
    Dim isAdmin As Boolean = False 
    Try 
     Dim user As IIdentity = WindowsIdentity.GetCurrent() 
     Dim principal As New WindowsPrincipal(CType(user, WindowsIdentity)) 
     isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator) 
     Return isAdmin 
    Catch ex As Exception 
     Return isAdmin 
    End Try 
    End Function 

#End Region 

End Class 

使用類和功能,只需簡單地調用它在任何需要的地方。我使用了一個消息框來顯示它,以便使用按鈕單擊事件進行測試。

Private Sub btnIsAdmin_Click(sender As Object, e As EventArgs) Handles btnIsAdmin.Click 
    If SecurityClass.IsAdministrator Then 
     MessageBox.Show("Current user is an Administrator") 
    Else 
     MessageBox.Show("Current user is not Administrator") 
    End If 
End Sub 
+0

不要工作...這個代碼採取執行程序的配置文件。因此,如果我選擇RUN AS,則此代碼不會採用當前Windows登錄帳戶,而是在RUN中使用的帳戶...如果我在字符串中擁有正確的帳戶,我可以檢查此字符串是否是管理員帳戶?我的意思是這樣的:String.IsInRole(WindowsBuiltInRole.Administrator) – GMX 2014-08-29 10:25:31

0
Public Function UserIsAdmin(ByVal userName As String) As Boolean 
     Dim groupName As String = "administrators" '<--You can localize this' 
     Dim isAdmin As Boolean 
     Using context As PrincipalContext = New PrincipalContext(ContextType.Machine) 
      Dim gfilter As GroupPrincipal = GroupPrincipal.FindByIdentity(context, groupName) 
      If gfilter IsNot Nothing Then 
       Dim members = gfilter.GetMembers 
       For Each member In members 
        If String.Compare(member.Name, userName, True) = 0 Then 
         isAdmin = True 
        End If 
       Next 
      End If 
     End Using 
     Return isAdmin 
End Function 
相關問題