如何在组合框中列出所有本地计算机用户配置文件?

时间:2013-01-31 20:32:31

标签: c#

我需要枚举本地计算机上的所有用户配置文件,并将它们列在组合框中。需要过滤掉任何特殊帐户。我只关心应用程序运行的计算机上的实际用户配置文件。我做了一些搜索,但我没有在任何地方找到明确的答案。我确实找到了一些可能有用的代码,但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"]);
}

2 个答案:

答案 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控件的数据源。