1

我正在尝试检索所有曾经登录到 PC 的用户并将它们填充到组合框中,但是在搜索之后,我没有找到任何好的答案。

我打算看看:

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

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

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

4

4 回答 4

5

好的,好吧,我想通了,毕竟实际上是使用 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,但可以轻松过滤这些帐户。感谢所有的帮助。

于 2013-05-23T13:20:31.087 回答
1

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

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

于 2013-05-22T14:33:46.510 回答
1

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

此外,您可以尝试运行 CMD 的“net user”命令并使用类似的东西捕获返回

编辑:根据下面的评论,检查一下,看看它是否有帮助:https ://stackoverflow.com/a/8455654/1046689

于 2013-05-22T14:38:31.057 回答
0

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

于 2013-05-22T14:36:13.290 回答