获取所有使用c#登录过PC的用户

时间:2013-05-22 14:18:48

标签: c# user-profile

我正在尝试检索所有登录过PC并将其填入组合框的用户,但搜索后,我找不到任何好的答案。

我打算看看:

DirectoryInfo(Environment.GetEnvironmentVariable("USERPROFILE")).Parent.GetDirectories();

但我觉得这是不可靠的方式。

接下来,我将查看注册表,但在阅读之后,如果用户帐户名称曾被更改,则该列表将不会更新。我知道必须有机器上所有用户配置文件的记录,因为我使用Microsoft systernals工具来管理它们。但是我无法弄清楚如何用c#编程来实现它。

4 个答案:

答案 0 :(得分:4)

好吧,好吧,我想到了这一点,毕竟实际上是WMI,这是我的代码。

using System.Security.Principal;
using System.Management;
private void GetLocalUserAccounts()
{
     SelectQuery query = new SelectQuery("Win32_UserProfile");
     ManagementObjectsSearcher searcher = new ManagementObjectSearcher(query);
     foreach (ManagementObject sid in searcher.Get())
     {
          MessageBox.Show(new SecurityIdentifier(sid["SID"].ToString()).Translate(typeof(NTAccount)).ToString());
     }
}

这也返回系统帐户IE:NT_Authority NT_System,但这些可以轻松过滤。感谢您的帮助。

答案 1 :(得分:1)

我建议你看看WMI。它允许您在机器上运行类似sql的查询以获取大量系统信息。

VBScript中的一些灵感:http://social.technet.microsoft.com/Forums/en-US/ITCG/thread/2b99b836-ed8f-4146-89e4-947b79bf4862/

答案 2 :(得分:1)

如果用户是在本地计算机上创建的,那么它应该有一个用户文件夹,正如Joshua所说。

此外,您可以尝试运行CMD的“net user”命令并使用this之类的内容捕获返回值。

修改:根据以下评论,检查一下,看看是否有帮助:https://stackoverflow.com/a/8455654/1046689

答案 3 :(得分:0)

您可以迭代%windir%\ Users目录,省略默认文件夹名称(公共/管理员等)并从文件名中解析出用户名