我需要枚举本地计算机上的所有用户配置文件,并将它们列在组合框中。需要过滤掉任何特殊帐户。我只关心应用程序运行的计算机上的实际用户配置文件。我做了一些搜索,但我没有在任何地方找到明确的答案。我确实找到了一些可能有用的代码,但SelectQuery和ManagementObjectSearcher在VS中显示错误,我不知道我需要做些什么才能使其工作。
using System.Management;
SelectQuery query = new SelectQuery("Win32_UserAccount");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
foreach (ManagementObject envVar in searcher.Get())
{
Console.WriteLine("Username : {0}", envVar["Name"]);
}
答案 0 :(得分:1)
通过说“SelectQuery和ManagementObjectSearcher显示错误”,我猜您没有引用System.Management
dll。
您应右键单击解决方案中的参考并添加 System.Management 。
然后,使用using
语句,错误应该消失。
无论如何,下次包括错误将有助于每个人帮助你:)
答案 1 :(得分:1)
上面提到的代码很棒,但是当我尝试连接到Active Directory域的计算机时,为域返回了所有用户名。我能够稍微调整一下代码,只返回当前机器上实际拥有本地目录的用户。如果一个更好的C#开发人员可以重构代码以使其更清洁 - 请帮助!
var localDrives = Environment.GetLogicalDrives();
var localUsers = new List<string>();
var query = new SelectQuery("Win32_UserAccount") { Condition = "SIDType = 1 AND AccountType = 512" };
var searcher = new ManagementObjectSearcher(query);
foreach (ManagementObject envVar in searcher.Get())
{
foreach (string drive in localDrives)
{
var dir = Path.Combine(String.Format("{0}Users", drive), envVar["name"].ToString());
if (Directory.Exists(dir))
{
localUsers.Add(envVar["name"].ToString());
}
}
}
拥有localUsers变量后,您可以将其设置为我们选择的ComboBox控件的数据源。