gpt4 book ai didi

c# - 如何知道用户账号是否存在

转载 作者:可可西里 更新时间:2023-11-01 12:35:18 26 4
gpt4 key购买 nike

  1. 我如何知道我的 Windows 操作系统 (Vista) 上是否存在用户帐户?我需要来自未加入任何域的独立计算机的此信息。

  2. 我想知道用户是否属于某个组,例如用户“admin”是否属于“Administrators”组?

最佳答案

您可以通过 System.Security.Principal 判断本地帐户是否存在使用以下代码命名空间。

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;
}

现在获得组成员资格稍微困难一些,您可以使用 WindowsPrinciple.IsInRole 轻松为当前用户完成此操作方法(从 WindowsIdentify.GetCurrent() 方法创建原则)。

正如所指出的,我认为不借助 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;
}

关于c# - 如何知道用户账号是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2043253/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com