检查Windows服务是否存在且正在运行

时间:2014-05-30 01:01:46

标签: .net vb.net visual-studio-2012 windows-services

如何在下面的代码中添加条件以检查服务是否正在运行?

For Each s As ServiceController In ServiceController.GetServices()
    If s.ServiceName = "test" Or s.ServiceName = "test1" Or s.ServiceName = "test2" Then
        s.Stop()
    End If
Next

2 个答案:

答案 0 :(得分:0)

您可以使用Service Controller Status属性和Running枚举:

For Each s As ServiceController In ServiceController.GetServices()
                If (s.ServiceName = "test" Or s.ServiceName = "test1" Or s.ServiceName = "test2") And (s.Status.Equals(ServiceControllerStatus.Running)) Then
                    s.Stop()
                End If
            Next

这有一些缺点,因为它只在运行时返回true,并且服务可以有许多状态。

ContinuePending 已暂停 PausePending 运行 StartPending 停止 StopPending

所以你可能想检查它是否已停止,如果这是假的,那么你可以阻止它。

答案 1 :(得分:0)

您可以检查ServiceController的状态,只有在它运行时才会停止它。您还应该检查可以停止:

For Each s As ServiceController In ServiceController.GetServices()
    If s.ServiceName = "test" OrElse 
       s.ServiceName = "test1" OrElse 
       s.ServiceName = "test2" Then
        If s.CanStop AndAlso s.Status = ServiceControllerStatus.Running Then
            s.Stop()
        End If
    End If
Next

请注意,您应尽可能使用OrElseAndAlso来提高代码效率