65.9K
CodeProject 正在变化。 阅读更多。
Home

一个集合类,用于列出您网络中的所有计算机和服务器,带有类别信息

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.74/5 (18投票s)

2006年5月7日

CPOL

3分钟阅读

viewsIcon

90333

downloadIcon

3871

一个集合类,用于列出您网络中的所有计算机和服务器,带有类别信息。

Sample Image - NetworkComputers.jpg

引言

本文是关于一个集合类,其中包含您网络中的所有计算机,包括域、域控制器、打印机服务器、SQL 服务器、时间服务器、终端服务器等。

背景

我计划使用远程处理编写一个 LAN 聊天信使应用程序。在该应用程序中,我需要知道我域中的所有工作站。 所以,我在 CodeProject 上找到了一个非常好的控件,标题为网络计算机选择器控件,由Marc Merritt编写。 感谢 Marc Merritt 发布了如此好的控件。 当我阅读他的文章时,我觉得一个集合类比计算机选择器控件更有用。 所以,我使用了他的代码并制作了这个集合类。 我发现它在我的 LAN 聊天信使应用程序中非常有用。

如何使用网络计算机类

该库中有四个类。

  1. DomainCollection:它是 Domain 类的集合。 它只有一个构造函数。 如果用户创建此类的实例,则它不会在构造时开始搜索域。 当 DomainCollection 类第一次使用时,它会在网络中搜索域。 用户可以通过调用 Refresh 方法强制该类进行搜索。 此方法清除现有列表,并再次搜索网络中的域。
  2. DomainDomain 类包含 Computer 类的集合。 它具有以下集合
    1. Workstations:包含域中的所有工作站。
    2. DomainControllers:包含域中的所有域控制器。
    3. TerminalServers:包含域中的终端服务器的集合。
    4. TimeServers:包含域中的时间服务器的集合。
    5. PrintServers:包含域中的打印服务器的集合。
    6. DialinServers:包含域中的拨入服务器的集合。
    7. SQLServers:包含域中的 SQL 服务器的集合。
  3. ComputerCollection:它包含特定类型的 Computer 类的集合。 它具有与 DomainCollection 类相同的行为。 因此,它不会在构造类时搜索网络中的计算机。 当它第一次使用时,它会在网络中搜索计算机。 因此,当创建 Domain 类的实例时,它不会搜索网络中的所有计算机和服务器。 当使用集合时,例如 Workstations,它会在网络中搜索工作站。 用户可以通过调用 Refresh 方法来强制刷新列表。
  4. Computer:它有两个属性:NameServerType

测试应用程序

使用这个集合类非常容易。 这是一个如何使用该代码的示例。 我希望你会喜欢这个类。

LoadComputerList 方法是从测试应用程序的 UI 中的一个不同线程中调用的。 使用该库不需要此方法。 该库会在第一次调用时搜索网络中的计算机和服务器。 但是,用户可能希望强制该库搜索域和计算机或服务器,因为应用程序的性质决定了这一点。 在此应用程序中,我在一个不同的线程中搜索计算机和服务器。 因为,在一个大型网络中,搜索需要时间。 使用互斥锁来识别搜索是否完成。

private void LoadComputerList()
{
    Mutex loadMutex=new Mutex(false,"NetworkComputer");
    loadMutex.WaitOne();
    myDomains=new DomainCollection();
    myDomains.Refresh();
    for (int i=0;i<myDomains.Count;i++)
    {
        myDomains[i].DialinServers.Refresh();
        myDomains[i].DomainControllers.Refresh();
        myDomains[i].PrintServers.Refresh();
        myDomains[i].TerminalServers.Refresh();
        myDomains[i].TimeServers.Refresh();
        myDomains[i].Workstations.Refresh();
        myDomains[i].SQLServers.Refresh();
    }
    loadMutex.ReleaseMutex();
}

要在树视图中加载列表,我使用一个计时器,我在其中等待互斥锁。

private void timer1_Tick(object sender, System.EventArgs e)
{
    Mutex loadMutex=new Mutex(false,"NetworkComputer");
    if(loadMutex.WaitOne(0,false)==true)
    {
        timer1.Enabled=false;
        tvComputerList.Nodes.Clear();
        for (int i=0;i<myDomains.Count;i++)
        {
            System.Windows.Forms.TreeNode domainNode= 
                           new TreeNode(myDomains[i].Name);
            tvComputerList.Nodes.Add(domainNode);
            if (myDomains[i].DialinServers.Count>0)
            {
                System.Windows.Forms.TreeNode serversNode=
                           new TreeNode("Dial In Servers");
                domainNode.Nodes.Add(serversNode);
                for (int j=0;j<myDomains[i].DialinServers.Count;j++)
                {
                    System.Windows.Forms.TreeNode computerNode=
                           new TreeNode(myDomains[i].DialinServers[j].Name);
                    serversNode.Nodes.Add(computerNode);
                }
            }
            if (myDomains[i].DomainControllers.Count>0)
            {
                System.Windows.Forms.TreeNode serversNode=
                               new TreeNode("Domain Controllers");
                domainNode.Nodes.Add(serversNode);
                for (int j=0;j<myDomains[i].DomainControllers.Count;j++)
                {
                    System.Windows.Forms.TreeNode computerNode=
                           new TreeNode(myDomains[i].DomainControllers[j].Name);
                    serversNode.Nodes.Add(computerNode);
                }
            }
            if (myDomains[i].PrintServers.Count>0)
            {
                System.Windows.Forms.TreeNode serversNode=
                            new TreeNode("Print Servers");
                domainNode.Nodes.Add(serversNode);
                for (int j=0;j<myDomains[i].PrintServers.Count;j++)
                {
                    System.Windows.Forms.TreeNode computerNode=
                      new TreeNode(myDomains[i].PrintServers[j].Name);
                    serversNode.Nodes.Add(computerNode);
                }
            }
            if (myDomains[i].TerminalServers.Count>0)
            {
                System.Windows.Forms.TreeNode serversNode=
                         new TreeNode("Terminal Servers");
                domainNode.Nodes.Add(serversNode);
                for (int j=0;j<myDomains[i].TerminalServers.Count;j++)
                {
                    System.Windows.Forms.TreeNode computerNode=
                      new TreeNode(myDomains[i].TerminalServers[j].Name);
                    serversNode.Nodes.Add(computerNode);
                }
            }
            if (myDomains[i].TimeServers.Count>0)
            {
                System.Windows.Forms.TreeNode serversNode=
                     new TreeNode("Time Servers");
                domainNode.Nodes.Add(serversNode);
                for (int j=0;j<myDomains[i].TimeServers.Count;j++)
                {
                    System.Windows.Forms.TreeNode computerNode=
                           new TreeNode(myDomains[i].TimeServers[j].Name);
                    serversNode.Nodes.Add(computerNode);
                }
            }
            if (myDomains[i].Workstations.Count>0)
            {
                System.Windows.Forms.TreeNode serversNode=
                             new TreeNode("Workstations");
                domainNode.Nodes.Add(serversNode);
                for (int j=0;j<myDomains[i].Workstations.Count;j++)
                {
                    System.Windows.Forms.TreeNode computerNode=
                      new TreeNode(myDomains[i].Workstations[j].Name);
                    serversNode.Nodes.Add(computerNode);
                }
            }
            if (myDomains[i].SQLServers.Count>0)
            {
                System.Windows.Forms.TreeNode serversNode=
                              new TreeNode("SQL Servers");
                domainNode.Nodes.Add(serversNode);
                for (int j=0;j<myDomains[i].SQLServers.Count;j++)
                {
                    System.Windows.Forms.TreeNode computerNode=
                           new TreeNode(myDomains[i].SQLServers[j].Name);
                    serversNode.Nodes.Add(computerNode);
                }
            }
        }
        loadMutex.ReleaseMutex();
    }
}
© . All rights reserved.