0

目前,我正在处理一个迁移请求,我们需要将框架从 3.5 更改为 4.6.2。这里的问题是在更改以下方法的框架后未按预期显示结果。My.User.IsInRole()总是返回假。

If My.User.IsInRole(nlRole.InnerText) Then
   hasRole = True
   Exit For
End If

另外,我使用以下代码进行了测试:

Imports System.Security.Principal

Class PrincipalCheck
    Shared Function UserInRole(role As String) As Boolean
        Dim currPrincipal As New WindowsPrincipal(New WindowsIdentity(Environment.UserName))
        Return currPrincipal.IsInRole(role)
    End Function
End Class

Public Sub StartCheck()
   MsgBox(PrincipalCheck.UserInRole("MyDomain\MyGroup"))
End Sub

但没有运气。有人可以帮我解决上述问题。

如果您希望我提供更多信息,请告诉我。

4

1 回答 1

0

怀疑这个问题可能与使用Environment.UserName. 尝试用 替换它WindowsIdentity.GetCurrent(),因此:

Shared Function UserInRole(role As String) As Boolean
    Dim currPrincipal As New WindowsPrincipal(WindowsIdentity.GetCurrent())
    Return currPrincipal.IsInRole(role)
End Function

但是,值得记住的是,用户帐户控制可能会妨碍您。如果您没有运行提升,那么上述内容将不适用于WindowsBuiltInRole.Administrator,可能还有其他人。所以这也可能是一个问题。所以值得一看的是,当你高架运行时,你是否会得到不同的结果。

于 2021-01-07T11:22:34.210 回答