По сути, я пытаюсь создаю свой собственный FolderDialog, и у меня локальные диски работают отлично, но я не могу заставить работать сетевые диски/общие ресурсы...
Я решил разбить это на более мелкие части, чтобы попробовать чтобы разработать эту функцию, но даже там я застрял.
Поэтому я пытаюсь создать фрагмент кода, который будет возвращать список имен компьютеров, IP-адресов и UNC. Пути других компьютеров в сети.
Ничто из того, что я пробовал, не помогло, и я пробовал много разных подходов (некоторые из них я подробно опишу ниже).Я понимаю, что подход к извлечению сетевых компьютеров в домене будет отличаться от подхода к одноранговой сети без домена, поэтому в идеале мне бы хотелось что-то, что каким-то образом работало бы для обоих...< /p>
Но нашел ли кто-нибудь работающий и эффективный способ получить список компьютеров в сети? Вот некоторые из подходов, которые я пробовал. Ни один из них не помог.
Я очень ценю помощь!
1)
DataTable resultDT = new DataTable();
resultDT.Columns.Add("ComputerName", typeof(string));
resultDT.Columns.Add("ComputerUNCPath", typeof(string));
resultDT.Columns.Add("IPAddress", typeof(string));
string WG = ComputerWorkgroupNameString(); //This does work.
try
{
// Create a directory entry for the WinNT provider with the workgroup name
DirectoryEntry workgroup = new DirectoryEntry("WinNT://" + WG);
foreach (DirectoryEntry child in workgroup.Children)
{
// Filter out non-computer entries (e.g., schemas)
if (child.SchemaClassName == "Computer")
{
// Retrieve IP address (if available)
var ipAddress = child.Properties["IpAddress"].Value;
resultDT.Rows.Add(child.Name, "", ipAddress);
}
}
}
catch (Exception ex)
{
}
{
Domain domain = Domain.GetCurrentDomain();
DomainControllerCollection domainControllers = domain.DomainControllers;
foreach (DomainController dc in domainControllers)
{
resultDT.Rows.Add(dc.Name, "", dc.IPAddress);
}
}
catch (ActiveDirectoryOperationException ex)
{
}
NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface nic in networkInterfaces)
{
if (nic.OperationalStatus == OperationalStatus.Up)
{
resultDT.Rows.Add(Environment.MachineName, "", nic.GetIPProperties().UnicastAddresses[0].Address);
}
}
DirectoryEntry root = new DirectoryEntry("WinNT:");
// Iterate through the children (computers) in the root
foreach (DirectoryEntry computers in root.Children)
{
foreach (DirectoryEntry computer in computers.Children)
{
// Filter out non-computer entries (e.g., schemas)
if (computer.SchemaClassName == "Computer")
{
//Console.WriteLine(computer.Name);
resultDT.Rows.Add(computer.Name, "");
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... -unc-paths
Мобильная версия