现在的位置: 首页 >> 程序开发 >> VB.NET >> VB.NET开发扫描客户端服务工具(2)
添加时间:2005-8-16 来源:网教中国 作者: yesky/吴羽
VB.NET开发扫描客户端服务工具(2)

     ‘首先我们定义一个类,主要用于得到某个IP地址的Service的状态信息,并在服务状态不正常时触发另一线程得到该系统的详细信息。
  
  Imports System.ServiceProcess
  
  Imports System.Xml
  
  Imports System.Threading
  
  Public Class GetStatus
  
  Private IServiceName As String ‘服务的名称
  
  Private IMachineIP As String ‘IP地址
  
  Private ITable As String ‘在DATESET中的表名
  
  ‘构造函数
  
  Sub New(ByVal Ip As String, ByVal SvcName As String, ByVal updatetable As String)
  
  IMachineIP = Ip
  
  IServiceName = SvcName
  
  ITable = updatetable
  
  End Sub
  
  ‘每个线程所运行的方法,用于得到服务的状态,如果状态不正常则触发另一线程得到该IP的信息
  
  Sub GetStausF()
  
  Dim ServiceP As New ServiceController() ‘实例化一个ServiceController类
  
  ServiceP.MachineName = IMachineIP
  
  ServiceP.ServiceName = IServiceName
  
  Dim myRow As DataRow
  
  Dim status As String
  
  Dim Run As Boolean = False
  
  myRow = ds.Tables(ITable).NewRow
  
  Try
  
  If ServiceP.Status.ToString <> "Running" Then
  
  status = ServiceP.Status.ToString‘如果状态不是RUNNING则将状态赋予字符串变量
  
  Else
  
  Run = True ‘如果状态为RUNNING,则不做任何事
  
  End If
  
  Catch er As Exception ‘以下处理取得状态时候发生的异常
  
  status = Left(er.Message, 35)
  
  If InStr(status, "Service Control Manager") = 0 Then
  
  status = "Not installed or open service failed" ‘没有安装该服务
  
  ElseIf InStr(er.Message, "Manager") > 0 Then
  
  status = "Can not detected" ‘服务的状态不可得
  
  End If
  
  End Try
  
  ServiceP.Close() ‘关闭ServiceController实例
  
  ‘以下判断如果状态不是RUNNING,则记录该系统,并触发线程得到它的详细信息。
  
  If Not Run Then
  
  myRow("msg") = status
  
  myRow("ip") = IMachineIP
  
  SyncLock GetType(AddRow) ‘为保证多线程情况下,对DataSet只有一个写操作,锁定AddRow类
  
  Dim AddRowIns As New AddRow(myRow) ‘将IP和状态通过我们自己写的AddRow类插入DataSet
  
  End SyncLock
  
  ‘触发另一线程取得机器信息
  
  Dim HostInfo2 As New HostInfo(IMachineIP)
  
  Dim HostThr2 As New Thread(New ThreadStart(AddressOf HostInfo2.sysInfo))
  
  HostThr2.Start()
  
  SyncLock GetType(HostInfoThreadCounter)
  
  HostInfoThreadCounter.counter += 1 ‘启动线程数加1
  
  End SyncLock
  
  End If
  
  SyncLock GetType(StoppCounter)
  
  StopThr.AddStop()
  
  End SyncLock
  
  End Sub
  
  End Class
  
  ‘该类只有一个方法,就是将停止的线程数减1
  
  Class StoppCounter
  
  Sub AddStop()
  
  ThreadCounterStopped = ThreadCounterStopped + 1
  
  End Sub
  
  End Class
  
  ‘此类用于将已有的行插入DataSet
  
  Class AddRow
  
  ‘第一个构造函数,以构造好的行为输入参数
  
  Sub New(ByVal row As DataRow)
  
  Try
  
  ds.Tables(0).Rows.Add(row)
  
  Catch ee As Exception
  
  
  
  End Try
  
  End Sub
  
  ‘第二个构造函数,以机器名用户名等字符串为参数,更新已有的行
  
  Sub New(ByVal IP As String, ByVal user As String, ByVal hostname As String, ByVal Mac As String, ByVal domain As String, ByVal timeout As Char)
  
  Dim RowTimeOut As DataRow
  
  Try
  
  For Each RowTimeOut In ds.Tables(0).Select("IP='" & IP & "'")
  
  RowTimeOut.Item("LastUID") = us

[1] [2] [3]  下一页


上一篇:VB.NET开发扫描客户端服务工具(1) 下一篇:使用TreeView控件
大部分文章摘自网上,如有侵犯您的权益请与我们联系,我们会第一时间进行处理,谢谢! [ 打印文章 ] [ 关闭窗口 ]
推荐文章
·全面剖析VB.NET(1)
·P2P的简单示例:VB.net版
·在打印时如何度量字符串?
·使用TreeView控件
·VB.NET开发扫描客户端服务工具(1
·使用 Visual Basic .NET 访问注
·全面剖析VB.NET(7)
·全面剖析VB.NET(5)
·在VB.NET中使用动态属性
·VB.NET实现超级ptm查看器
相关文章
·VB.NET开发扫描客户端服务工具(1
最新文章
·P2P的简单示例:VB.net版
·在打印时如何度量字符串?
·使用TreeView控件
·VB.NET开发扫描客户端服务工具(1
·百万程序员的苦恼-选择VB.NET还
·使用 Visual Basic .NET 访问注
·全面剖析VB.NET(7)
·全面剖析VB.NET(6)
·全面剖析VB.NET(5)
·全面剖析VB.NET(4)
Google