1

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

2 回答 2

1

通过说“SelectQuery 和 ManagementObjectSearcher 显示错误”我猜你没有引用System.Managementdll。
您应该在解决方案中右键单击References并添加System.Management
然后,根据您的using陈述,错误应该会消失。

无论如何,包括错误下次会帮助大家帮助你:)

于 2013-01-31T21:05:37.050 回答
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 控件的数据源。

于 2016-05-05T20:55:45.987 回答