我正在尝试检索所有登录过PC并将其填入组合框的用户,但搜索后,我找不到任何好的答案。
我打算看看:
DirectoryInfo(Environment.GetEnvironmentVariable("USERPROFILE")).Parent.GetDirectories();
但我觉得这是不可靠的方式。
接下来,我将查看注册表,但在阅读之后,如果用户帐户名称曾被更改,则该列表将不会更新。我知道必须有机器上所有用户配置文件的记录,因为我使用Microsoft systernals工具来管理它们。但是我无法弄清楚如何用c#编程来实现它。
答案 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目录,省略默认文件夹名称(公共/管理员等)并从文件名中解析出用户名