.NET服务检测(如果存在?)

时间:2014-04-12 11:42:21

标签: .net service servicecontroller

道歉,如果这是一个愚蠢的问题,但我正在学习,并且我试图使用我掌握的所有文档而且我已经相当远,但是我被卡住了在最后一个区域。

问题

我试图检测服务是否存在/正在运行并依赖于结果更改标签以显示状态。 - 我已经检查了状态,但是我无法确定如何检查服务是否确实存在。

我正在使用ServiceController类。

当前子

Public Shared Sub detectExchange()

    Dim service As New ServiceController("Microsoft Exchange Service Host")

    If service.Status.Equals(ServiceControllerStatus.Running) Or service.Status.Equals(ServiceControllerStatus.StartPending) Then
        systemchecks.Label9.Text = "Detected - Running"

    If service.Status.Equals(ServiceControllerStatus.Stopped) Or service.Status.Equals(ServiceControllerStatus.StopPending) Then
        systemchecks.Label9.Text = "Detected - NOT RUNNING"
    End If


End Sub

到目前为止我的工作

我一直在寻找像Exists这样的东西,我一直在用If service.ServiceNameIf service.这样的字符串来查看所有自动完成选项,但在那里&# 39;我所能看到的任何东西都无法检测到服务是否存在。

我考虑过使用GetServices方法,存储它然后搜索我的服务名称并返回结果吗?

我也尝试过厚颜无耻,只需将下面的内容添加到状态检查

     If service.Status.Equals(ServiceControllerStatus.Running) Or service.Status.Equals(ServiceControllerStatus.StartPending) Then
        systemchecks.Label9.Text = "Detected - Running"
    Else
        systemchecks.Label9.Text = "NOT INSTALLED"
    End If

但是我意识到这是一种可怕的方式,并且不会返回任何价值,但我只是想知道它是否会返回任何其他状态。

2 个答案:

答案 0 :(得分:0)

所以我在评论中添加了Try语句,以下是我的工作代码。

Public Shared Sub detectExchange()

    Dim service As New ServiceController("Microsoft Exchange Service Host")
    Try
        If service.Status.Equals(ServiceControllerStatus.Running) Or service.Status.Equals(ServiceControllerStatus.StartPending) Then
            systemchecks.Label9.Text = "Detected - Running"
        End If
    Catch ex As Exception
        systemchecks.Label9.Text = "NOT INSTALLED"

    End Try

    If service.Status.Equals(ServiceControllerStatus.Running) Or service.Status.Equals(ServiceControllerStatus.StartPending) Then
        systemchecks.Label9.Text = "Detected - Running"
        systemchecks.Label9.Text = "Detected - NOT RUNNING"
    End If

End Sub

答案 1 :(得分:0)

您可以在此处检查服务是否已安装并获取其状态(如果存在):

        For Each Svc As ServiceController In ServiceController.GetServices
        Using Svc
            If Svc.ServiceName.Equals("MSExchangeServiceHost") Then 'The short name of "Microsoft Exchange Service Host"
                'The service is exist
                systemchecks.Label9.Text = Svc.Status.ToString()
                Exit For
            End If
        End Using
    Next