C# 使用windows原则获取用户帐户组

C# 使用windows原则获取用户帐户组,c#,C#,我有一个简短的问题 实际上,我在windows环境10.0.16299.0版和UWP中工作。我想做的是获取有关用户帐户信息、其名称的信息,如果是其管理员或用户,代码如下所示: public class Priciple { public string UserName { get; set; } public string AccountDomainSid { get; set; } public List<string> Claims { get; se

我有一个简短的问题

实际上,我在windows环境10.0.16299.0版和UWP中工作。我想做的是获取有关用户帐户信息、其名称的信息,如果是其管理员或用户,代码如下所示:

public class Priciple
{
    public string UserName { get; set; }

    public string AccountDomainSid { get; set; }

    public List<string> Claims { get; set; }

    public string AdminRole { get; set; }

    public string UserRole { get; set; }

    public void GetUserInfo()
    {
        WindowsIdentity identity = WindowsIdentity.GetCurrent();
        WindowsPrincipal principal = new WindowsPrincipal(identity);

        UserName = identity.Name;
        AccountDomainSid = identity.User?.AccountDomainSid.Value ?? "Unknown";
        Claims = identity.Claims.Select(claim => claim.Value).ToList();

        AdminRole = $"Admin role {principal.IsInRole(@"BUILTIN\Administrators")}";
        UserRole = $"User role {principal.IsInRole(@"BUILTIN\Users")}";
    }
}
公共类原则
{
公共字符串用户名{get;set;}
公共字符串AccountDomainSid{get;set;}
公共列表声明{get;set;}
公共字符串AdminRole{get;set;}
公共字符串用户角色{get;set;}
public void GetUserInfo()
{
WindowsIdentity=WindowsIdentity.GetCurrent();
WindowsPrincipal=新的WindowsPrincipal(标识);
UserName=identity.Name;
AccountDomainSid=identity.User?.AccountDomainSid.Value???“未知”;
Claims=identity.Claims.Select(claim=>claim.Value.ToList();
AdminRole=$“管理员角色{principal.IsInRole(@“内置\Administrators”)}”;
UserRole=$“用户角色{principal.IsInRole(@“内置\Users”)}”;
}
}
现在,我得到了SID、用户名和其他内容的列表,所以类的简单显示如下所示:

用户名-DESKTOP-ISLHFK5\管理员域Sid-S-1-5-21-134928182-1594639943-345264679 本地帐户和组Sid: DESKTOP-ISLHFK5\管理员 S-1-5-21-134928182-1594639943-345264679-500-据我所知,这是管理员帐户 S-1-5-21-134928182-1594639943-345264679-513 S-1-5-21-134928182-1594639943-345264679-513 S-1-1-0 S-1-5-114 S-1-5-21-134928182-1594639943-345264679-1002 S-1-5-21-134928182-1594639943-345264679-1051 S-1-5-32-544 S-1-5-32-562 S-1-5-32-559 S-1-5-32-545 S-1-5-14 S-1-5-4 S-1-5-11 S-1-5-15 S-1-5-113 S-1-2-0 S-1-5-64-10

但当我检查管理员时,我得到:

权限信息管理员角色False


现在知道为什么了吗???

你会尝试使用
WindowsBuiltInRole.Administrator

var AdminRole = $"Admin role {principal.IsInRole(WindowsBuiltInRole.Administrator)}";

是否尝试使用
WindowsBuiltInRole.Administrator

var AdminRole = $"Admin role {principal.IsInRole(WindowsBuiltInRole.Administrator)}";

以下文件对此进行了解释:

在Windows Vista中,用户帐户控制(UAC)决定用户的权限。如果您是内置Administrators组的成员,则会为您分配两个运行时访问令牌:标准用户访问令牌和管理员访问令牌

默认情况下,您处于标准用户角色。当你试图 执行需要管理权限的任务,您可以 使用“同意”对话框动态提升您的角色。这个 执行IsInRole方法的代码不显示同意 对话框。如果您是标准用户,则代码返回false 角色,即使您在内置Administrators组中

您可以在执行代码之前通过右键单击提升权限 应用程序图标,指示您要作为应用程序运行 管理员


请使用myPrincipal.IsInRole(WindowsBuiltInRole.Administrator)重试,以检查该帐户是否为管理员

,文档中对此进行了说明:

在Windows Vista中,用户帐户控制(UAC)决定用户的权限。如果您是内置Administrators组的成员,则会为您分配两个运行时访问令牌:标准用户访问令牌和管理员访问令牌

默认情况下,您处于标准用户角色。当你试图 执行需要管理权限的任务,您可以 使用“同意”对话框动态提升您的角色。这个 执行IsInRole方法的代码不显示同意 对话框。如果您是标准用户,则代码返回false 角色,即使您在内置Administrators组中

您可以在执行代码之前通过右键单击提升权限 应用程序图标,指示您要作为应用程序运行 管理员

请使用
myPrincipal.IsInRole(WindowsBuiltInRole.Administrator)
重试,以检查该帐户是否为管理员