C# 如何知道用户帐户是否存在
如何知道我的Windows操作系统(Vista)上是否存在用户帐户?我需要一台尚未加入任何域的单机提供此信息C# 如何知道用户帐户是否存在,c#,windows,user-accounts,C#,Windows,User Accounts,如何知道我的Windows操作系统(Vista)上是否存在用户帐户?我需要一台尚未加入任何域的单机提供此信息 我想知道用户是否是组的一部分,例如,用户“admin”是否是“Administrators”组的一部分 您可以使用以下代码通过名称空间确定本地帐户是否存在 bool AccountExists(string name) { bool bRet = false; try { NTAccount acct = new NTAccount(name);
您可以使用以下代码通过名称空间确定本地帐户是否存在
bool AccountExists(string name)
{
bool bRet = false;
try
{
NTAccount acct = new NTAccount(name);
SecurityIdentifier id = (SecurityIdentifier)acct.Translate(typeof(SecurityIdentifier));
bRet = id.IsAccountSid();
}
catch (IdentityNotMappedException)
{
/* Invalid user account */
}
return bRet;
}
现在获得组成员资格稍微困难一些,您可以使用该方法(从该方法创建原则)轻松地为当前用户实现这一点
正如我所指出的,我不认为有一种方法可以不借助PInvoke或WMI获得任何其他东西。下面是一些代码,用于检查WMI的组成员资格
bool IsUserInGroup(string name, string group)
{
bool bRet = false;
ObjectQuery query = new ObjectQuery(String.Format("SELECT * FROM Win32_UserAccount WHERE Name='{0}' AND LocalAccount=True", name));
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
ManagementObjectCollection objs = searcher.Get();
foreach (ManagementObject o in objs)
{
ManagementObjectCollection coll = o.GetRelated("Win32_Group");
foreach (ManagementObject g in coll)
{
bool local = (bool)g["LocalAccount"];
string groupName = (string)g["Name"];
if (local && groupName.Equals(group, StringComparison.InvariantCultureIgnoreCase))
{
bRet = true;
break;
}
}
}
return bRet;
}
我已经尝试了以下代码,对我来说效果很好
public bool IsUserMemberOfGroup(string userName, string groupName)
{
bool ret = false;
try
{
DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName);
DirectoryEntry userGroup = localMachine.Children.Find(groupName, "group");
object members = userGroup.Invoke("members", null);
foreach (object groupMember in (IEnumerable)members)
{
DirectoryEntry member = new DirectoryEntry(groupMember);
if (member.Name.Equals(userName, StringComparison.CurrentCultureIgnoreCase))
{
ret = true;
break;
}
}
}
catch (Exception ex)
{
ret = false;
}
return ret;
}
多谢你,泰兰德。它正在工作,但有点慢。无论如何,再次感谢!!如果将NTAccount更改为此NTAccount acct=new NTAccount(Environment.MachineName,name);要快得多。你可能想看看这个。它将通过WMI提供计算机上用户的枚举列表。然后,您可以检查您的帐户是否存在。论坛还链接到了一篇关于这个问题的文章。我相信你也可以通过WMI获得团体成员资格,但我可能错了。