2

我需要以编程方式(在 .NET 中)检查给定用户(域帐户)是否是当前计算机(执行应用程序的计算机)上内置管理员组的成员。

是否可以?

4

4 回答 4

2

我不了解.Net,但在win32 中,简单的方法是调用IsUserAnAdmin()。如果您需要更多控制权,您可以打开流程令牌并使用 CheckTokenMembership 检查您需要检查的每个组

编辑:请参阅pinvoke.net以获取 .NET 示例代码(感谢 Chopeen)

于 2008-09-09T16:13:38.867 回答
2

有一个 Win32 API 可以用于 P/Invoke:IsUserAnAdmin

Vista 上的问题更为复杂……请参阅此博客文章

于 2008-09-09T16:14:15.543 回答
1

您可以像我在这个答案中所做的那样循环组:

通过 C# 确定本地组的成员

在阅读了更多内容之后,最简单的事情就是使用System.DirectoryServices.AccountManagement命名空间。以下是它的使用方法:

http://www.leastprivilege.com/SystemDirectoryServicesAccountManagement.aspx

样本:

public static bool IsUserInGroup(string username, string groupname, ContextType type)
{
    PrincipalContext context = new PrincipalContext(type);

    UserPrincipal user = UserPrincipal.FindByIdentity(
        context,
        IdentityType.SamAccountName,
        username);
    GroupPrincipal group = GroupPrincipal.FindByIdentity(
        context, groupname);

    return user.IsMemberOf(group);
}
于 2008-09-09T16:10:55.067 回答
1

如果您正在谈论当前正在运行的用户,那么

using System.Security.Principal;

WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal wp = new WindowsPrincipal(identity);

if (wp.IsInRole("BUILTIN\Administrators"))
   // Is Administrator
else
   // Is Not

如果不是,那么我希望它可以为特定用户设置身份,但没有研究如何。

于 2008-11-21T20:41:30.003 回答