【问题标题】:Get list of local computer usernames in Windows在 Windows 中获取本地计算机用户名列表
【发布时间】:2023-04-03 21:10:02
【问题描述】:

如何使用 C# 在 windows 中获取本地计算机用户名列表?

【问题讨论】:

    标签: c# windows


    【解决方案1】:
    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"]);
    }
    

    此代码与link KeithS posted 相同。几年前我使用它没有问题,但忘记了它的来源,谢谢 Keith。

    【讨论】:

    • "没有问题" -> 根据我的经验,WMI 的失败率 > 0.5%,因此如果集成到面向客户的应用程序中,请小心
    • 警告:如果您连接到大型网络,此命令将需要很长时间。您可以在飞行模式下测试此命令以找到预期的结果。
    • 没有 wmi 有没有办法做到这一点?
    【解决方案2】:

    我使用此代码获取本地 Windows 7 用户:

    public static List<string> GetComputerUsers()
    {
        List<string> users = new List<string>();
        var path =
            string.Format("WinNT://{0},computer", Environment.MachineName);
    
        using (var computerEntry = new DirectoryEntry(path))
            foreach (DirectoryEntry childEntry in computerEntry.Children)
                if (childEntry.SchemaClassName == "User")
                    users.Add(childEntry.Name);
    
        return users;
    }
    

    【讨论】:

    • 太棒了!机器不是目录成员的时候测试过吗?
    • @marsh-wiggle 不,抱歉。
    【解决方案3】:

    一种方法是列出C:\Documents and Settings 中的目录(在Vista/7 中:C:\Users)。

    【讨论】:

    • tnx,不过好像不是很标准! :D
    • ...它还假设他们曾经登录过。
    • 在 C# 中有没有办法只获取曾经登录过的用户?
    • 这个答案显示了使用 interop stackoverflow.com/a/132774/403999 登录我的窗口的用户
    【解决方案4】:

    以下是获取本地计算机名称的几种不同方法:

    string name = Environment.MachineName;
    string name = System.Net.Dns.GetHostName();
    string name = System.Windows.Forms.SystemInformation.ComputerName;
    string name = System.Environment.GetEnvironmentVariable(“COMPUTERNAME”);
    

    【讨论】:

    • 这些将返回当前用户名。我都想要。
    猜你喜欢
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 2011-06-14
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    相关资源
    最近更新 更多