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






4.74/5 (18投票s)
一个集合类,用于列出您网络中的所有计算机和服务器,带有类别信息。
引言
本文是关于一个集合类,其中包含您网络中的所有计算机,包括域、域控制器、打印机服务器、SQL 服务器、时间服务器、终端服务器等。
背景
我计划使用远程处理编写一个 LAN 聊天信使应用程序。在该应用程序中,我需要知道我域中的所有工作站。 所以,我在 CodeProject 上找到了一个非常好的控件,标题为网络计算机选择器控件,由Marc Merritt编写。 感谢 Marc Merritt 发布了如此好的控件。 当我阅读他的文章时,我觉得一个集合类比计算机选择器控件更有用。 所以,我使用了他的代码并制作了这个集合类。 我发现它在我的 LAN 聊天信使应用程序中非常有用。
如何使用网络计算机类
该库中有四个类。
DomainCollection
:它是Domain
类的集合。 它只有一个构造函数。 如果用户创建此类的实例,则它不会在构造时开始搜索域。 当DomainCollection
类第一次使用时,它会在网络中搜索域。 用户可以通过调用Refresh
方法强制该类进行搜索。 此方法清除现有列表,并再次搜索网络中的域。Domain
:Domain
类包含Computer
类的集合。 它具有以下集合Workstations
:包含域中的所有工作站。DomainControllers
:包含域中的所有域控制器。TerminalServers
:包含域中的终端服务器的集合。TimeServers
:包含域中的时间服务器的集合。PrintServers
:包含域中的打印服务器的集合。DialinServers
:包含域中的拨入服务器的集合。SQLServers
:包含域中的 SQL 服务器的集合。
ComputerCollection
:它包含特定类型的Computer
类的集合。 它具有与DomainCollection
类相同的行为。 因此,它不会在构造类时搜索网络中的计算机。 当它第一次使用时,它会在网络中搜索计算机。 因此,当创建Domain
类的实例时,它不会搜索网络中的所有计算机和服务器。 当使用集合时,例如Workstations
,它会在网络中搜索工作站。 用户可以通过调用Refresh
方法来强制刷新列表。Computer
:它有两个属性:Name
和ServerType
。
测试应用程序
使用这个集合类非常容易。 这是一个如何使用该代码的示例。 我希望你会喜欢这个类。
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();
}
}