【问题标题】:Getting computer names from my network places从我的网络位置获取计算机名称
【发布时间】:2014-01-25 20:08:53
【问题描述】:

我想知道是否有一种方法可以使用 C# 获取出现在我的网络位置中的所有计算机名称。

【问题讨论】:

标签: c# networking


【解决方案1】:

您将需要使用 NetServerEnum() API。我不相信基础 .NET 库中有一个托管包装器,但我可以通过快速的谷歌搜索找到它:http://www.codeproject.com/Articles/16113/Retreiving-a-list-of-network-computer-names-using

注意:我没有测试或彻底审查过 codeproject 代码,但如果有任何问题,它应该足以满足您的需求。

编辑:除非您确定域环境,否则不要使用 DirectoryServices。 System.DirectoryServices 类是一个 ADSI 包装器,无需 Active Directory 即可查询。 NetServerEnum() 适用于工作组和域,但不保证最可靠的数据(并非所有机器都可能出现)。它依赖于计算机浏览器服务。

最好的解决方案可能是一个包含两种可能性并合并结果的类:/

【讨论】:

  • 这可能是一个非常愚蠢的问题,但是,使用 StreamReader 执行 'net view > computerListing.txt' 并完成它不是更容易吗?跨度>
  • 非常感谢!你的解释真的帮助我理解了!
【解决方案2】:

这可行,但需要一段时间。 :/

public List<String> ListNetworkComputers()
{
    List<String> _ComputerNames = new List<String>();
    String _ComputerSchema = "Computer";
    System.DirectoryServices.DirectoryEntry _WinNTDirectoryEntries = new System.DirectoryServices.DirectoryEntry("WinNT:");
    foreach (System.DirectoryServices.DirectoryEntry _AvailDomains in _WinNTDirectoryEntries.Children) {
        foreach (System.DirectoryServices.DirectoryEntry _PCNameEntry in _AvailDomains.Children) {
            if (_PCNameEntry.SchemaClassName.ToLower().Contains(_ComputerSchema.ToLower())) {
            _ComputerNames.Add(_PCNameEntry.Name);
            }
        }
    }
    return _ComputerNames;
}

【讨论】:

    【解决方案3】:

    取决于用户的许可,应用程序可能会或可能不会获得这些信息。

    尝试使用 ActiveDirectory。这应该可以为您提供有关本地网络的准确信息。

    使用 System.DirectoryServices。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-05
      • 1970-01-01
      • 2011-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多