如何知道一个已经知名的NT服务的状态?
如何对它操做?控制的启动,停止.

解决方案 »

  1.   

    可以用DOS命令
    提供一个WMI需要引用MS WMI 1.X
    添加LISTVIEW,两个COMMAND,1个TEXTBOX名称默认Option ExplicitDim objSWbemLocator As SWbemLocator
    Dim objSWbemServices As SWbemServices
    Dim objSWbemObjectSet As SWbemObjectSet
    Dim objSWbemObject As SWbemObject
    Dim strComputer As String, strNameSpace As String, strClass As String
    Private Sub Form_Load()
        ListView1.ColumnHeaders.Clear
        ListView1.ColumnHeaders.Add , , "名称", 2600
        ListView1.ColumnHeaders.Add , , "状态", 1000
        ListView1.ColumnHeaders.Add , , "启动类型", 1000
        ListView1.ColumnHeaders.Add , , "路径", 2600
        ListView1.ColumnHeaders.Add , , "登录身份", 1400
        ListView1.ColumnHeaders.Add , , "进程ID", 900
        ListView1.ColumnHeaders.Add , , "服务类型", 1400
        ListView1.View = lvwReport
        ListView1.FullRowSelect = True
        Command1.Caption = "停止"
        Command2.Caption = "启动"
        
        strComputer = "."           '计算机名,.为本机
        strNameSpace = "root\cimv2" '指定命名空间为root\cimv2
        strClass = "Win32_Service"  '指定类为Win32_Service
        Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")    '建立1个WBEM对象的引用指针
        Set objSWbemServices = objSWbemLocator.ConnectServer(strComputer, strNameSpace)  '连接到指定计算机、命名空间的WMI,返回一个对 SWbemServices 对象的引用
        RefreshList '刷新服务列表
    End Sub'停止指定服务
    Private Sub Command1_Click()
        If ListView1.SelectedItem.SubItems(5) <> 0 Then
            Set objSWbemObjectSet = objSWbemServices.ExecQuery("SELECT * FROM " & strClass & " WHERE DisplayName = '" & ListView1.SelectedItem.Text & "'")   '查询类中DisplayName属性等于指定值的实例
            For Each objSWbemObject In objSWbemObjectSet
                If objSWbemObject.StopService = 0 Then  '停止指定服务
                    MsgBox ListView1.SelectedItem.Text & "服务已经被停止!"
                Else
                    MsgBox ListView1.SelectedItem.Text & "服务不能被停止!"
                End If
            Next
            RefreshList '刷新服务列表
        End If
    End Sub'启动指定服务
    Private Sub Command2_Click()
            Set objSWbemObjectSet = objSWbemServices.ExecQuery("SELECT * FROM " & strClass & " WHERE DisplayName = '" & ListView1.SelectedItem.Text & "'")   '查询类中DisplayName属性等于指定值的实例
            For Each objSWbemObject In objSWbemObjectSet
                If objSWbemObject.StartService = 0 Then  '启动指定服务
                    MsgBox ListView1.SelectedItem.Text & "服务已经被启动!"
                Else
                    MsgBox ListView1.SelectedItem.Text & "服务不能被启动!"
                End If
            Next
            RefreshList '刷新服务列表
    End SubPrivate Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)
        If Item.SubItems(1) = "Stopped" Then
            Command1.Enabled = False
            Command2.Enabled = True
        Else
            Command1.Enabled = True
            Command2.Enabled = False
        End If
        
        '    Set objSWbemObjectSet = objSWbemServices.ExecQuery("SELECT * FROM " & strClass & " WHERE DisplayName = '" & ListView1.SelectedItem.Text & "'")   '查询类中DisplayName属性等于指定值的实例
        '    For Each objSWbemObject In objSWbemObjectSet
        '        If IsNull(objSWbemObject.Description) Then  '添加说明
        '            TxtDescription.Text = "无"
        '        Else
        '            TxtDescription.Text = objSWbemObject.Description
        '        End If
        '    Next
        '将说明显示出来
        TxtDescription.Text = ListView1.ListItems("a" & ListView1.SelectedItem.Index - 1).Tag
    End Sub'刷新服务列表
    Sub RefreshList()
    Dim i As Long
        ListView1.ListItems.Clear
        Set objSWbemObjectSet = objSWbemServices.ExecQuery("SELECT * FROM " & strClass)  '通过WQL查询,返回指定类的所有
        For Each objSWbemObject In objSWbemObjectSet
            ListView1.ListItems.Add , "a" & i, objSWbemObject.DisplayName '将服务名称添加到ListView1第一列
            ListView1.ListItems("a" & i).SubItems(1) = objSWbemObject.State '将服务的状态添加到ListView1第二列
            ListView1.ListItems("a" & i).SubItems(2) = objSWbemObject.StartMode '将服务的启动方式添加到ListView1第三列
            ListView1.ListItems("a" & i).SubItems(3) = objSWbemObject.PathName '将服务程序的路径添加到ListView1第四列
            ListView1.ListItems("a" & i).SubItems(4) = objSWbemObject.StartName '将服务的登录身份添加到ListView1第五列
            ListView1.ListItems("a" & i).SubItems(5) = objSWbemObject.ProcessId '将服务的进程ID添加到ListView1第六列
            ListView1.ListItems("a" & i).SubItems(6) = objSWbemObject.ServiceType '将服务类型添加到ListView1第7列
            If IsNull(objSWbemObject.Description) Then  '添加说明
                ListView1.ListItems("a" & i).Tag = "无"
            Else
                ListView1.ListItems("a" & i).Tag = objSWbemObject.Description
            End If
            i = i + 1
        Next
        Set ListView1.SelectedItem = ListView1.ListItems(1)
    End Sub
      

  2.   

    DOS命令是NET START可以获得已经启动的服务 另外XP也可以使用TASKLIST /SCV 获得一些服务信息其他的不知道了,,,,,,
    楼主还是请高手指教吧:)