Получение списка пользователей Windows - C#
Формулировка задачи:
Получаем список всех локальных пользователей на компьютере
Вариант №1
Работает, но работает до неприличия медленно, может быть можно как-то ускорить процесс?
Вариант №2 через WMI
Не выводит ничего, хотя всё должно работать.
Ну и собственно вопросы, можно ли сделать вариант №1 с удобоваримой скоростью или же в чём проблема в варианте №2?
Кстати, если убрать
из запроса, то скорость выполнения второго варианта станет сравнима со скоростью первого, однако же результата не будет всё равно никакого.
DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName);
foreach (DirectoryEntry child in localMachine.Children)
{
if (child.SchemaClassName == "User")
{
listBox1.Items.Add(child.Name + Environment.NewLine);
listBox2.Items.Add(child.Name + Environment.NewLine);
}
} ManagementObjectSearcher searcher =
new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_UserAccount WHERE LocalAccount=True");
foreach (ManagementObject envVar in searcher.Get())
{
listBox1.Items.Add(envVar["Name"] + Environment.NewLine);
listBox2.Items.Add(envVar["Name"] + Environment.NewLine);
}WHERE LocalAccount=True
Решение задачи: «Получение списка пользователей Windows»
textual
Листинг программы
using System;
using System.Management;
using System.Windows.Forms;
namespace WMISample
{
public class MyWMIQuery
{
public static void Main()
{
try
{
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_UserAccount");
foreach (ManagementObject queryObj in searcher.Get())
{
Console.WriteLine("-----------------------------------");
Console.WriteLine("Win32_UserAccount instance");
Console.WriteLine("-----------------------------------");
Console.WriteLine("Name: {0}", queryObj["Name"]);
}
}
catch (ManagementException e)
{
MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
}
}
}
}