Đối với mọi người VB.NET (tôi biết bạn đang ở ngoài đó ...), đây là phiên bản mà tôi đã pha chế từ nhiều nguồn khác nhau và tôi nghĩ, được tối ưu hóa để xác định xem người dùng hiện tại (bao gồm nâng cao) có trong nhóm Quản trị viên được xác định, máy hoặc miền, có hoặc không có UAC được bật. (Rất nhiều tín dụng cho các bài đăng khác ở đây và ở nơi khác cho bài đăng này!Thứ nhất, nó sử dụng một Boolean không có khả năng giữ nguyên trạng thái Administrator vì, mặc dù kiểm tra cơ bản nhanh chóng, kiểm tra đầy đủ có thể mất hàng chục giây, vì vậy bạn chỉ muốn thực hiện nó một lần - nếu ở tất cả nếu bạn có thể giúp nó.
Thứ hai, nó sai ở phía bên của kiểm tra cơ bản là không chính xác/sai, thường là trường hợp nếu người dùng là AD-quản lý hoặc nếu máy địa phương đã bật UAC. Vì vậy, nếu số điện thoại có thể quyết định người dùng là Quản trị viên, thì sẽ.
Thứ ba, bạn có thể thêm hoặc xóa tiêu chí khỏi AuthorizationGroups như bạn thấy phù hợp nhưng những thứ bao gồm hầu hết các trường hợp.
Cuối cùng, nếu xảy ra sự cố, bạn sẽ nhận được False; nếu bạn muốn một lỗi, bạn có thể có một, nhưng cá nhân tôi không thấy điểm.
Function IsAdministrator() As Boolean
Static bResult As Boolean? = Nothing
Try
If bResult Is Nothing Then
bResult = New WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator)
If Not bResult Then
Dim oContext As PrincipalContext = Nothing
Try 'to get a domain context first ...
Domain.GetComputerDomain()
oContext = New PrincipalContext(ContextType.Domain)
Catch
'... if it fails, fall through to a machine context
End Try
If oContext Is Nothing Then oContext = New PrincipalContext(ContextType.Machine)
Dim oPrincipal As UserPrincipal = UserPrincipal.FindByIdentity(oContext, WindowsIdentity.GetCurrent().Name)
If oPrincipal IsNot Nothing Then
bResult = oPrincipal.GetAuthorizationGroups().Any(Function(p) _
p.Sid.IsWellKnown(WellKnownSidType.BuiltinAdministratorsSid) OrElse
p.Sid.IsWellKnown(WellKnownSidType.AccountDomainAdminsSid) OrElse
p.Sid.IsWellKnown(WellKnownSidType.AccountAdministratorSid) OrElse
p.Sid.IsWellKnown(WellKnownSidType.AccountEnterpriseAdminsSid))
End If
End If
End If
Catch
bResult = False
End Try
Return bResult.GetValueOrDefault(False)
End Function
Tại sao bạn muốn biết điều đó? – svick
Vâng, đối với một, biết nếu bạn là một quản trị viên cho phép bạn biết nếu bạn * có thể * được nâng lên. – aboveyou00
@svick: Tôi cần hiển thị các phần tử giao diện người dùng nhất định nếu người dùng là thành viên của nhóm Quản trị viên. – markyd13