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

.NET服务检测(如果存在?),.net,service,servicecontroller,.net,Service,Servicecontroller,如果这是一个愚蠢的问题,我表示歉意,但我正在学习,我正在尝试使用我可以使用的所有文档,我已经走了相当远,但我仍停留在最后一个方面 问题 我试图检测服务是否存在/正在运行,并根据结果更改标签以显示状态。-我已经进行了状态检查,但是我无法确定如何检查该服务是否确实存在 我在用这门课 当前子系统 Public Shared Sub detectExchange() Dim service As New ServiceController("Microsoft Exchange Service

如果这是一个愚蠢的问题,我表示歉意,但我正在学习,我正在尝试使用我可以使用的所有文档,我已经走了相当远,但我仍停留在最后一个方面

问题

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

我在用这门课

当前子系统

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.ServiceName
If service等字符串。
查看了所有自动完成选项,但我看不到任何东西可以检测到服务是否存在

我曾经考虑过使用
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

但我意识到这是一种糟糕的做法,不会返回任何值,但我只是想看看它是否会返回任何其他状态。

因此,我添加了一个
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

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

        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

发生了一些异常情况,您希望服务出现,但实际情况并非如此。您可以使用Try/Catch来处理异常情况。捕获您得到的无效操作异常。如果缺少服务会使您的程序无用,请不要捕获。因此,我应该将其更改为函数并添加捕获异常?那么,在这个catch中,我会添加文本来修改标签?当然。指定标签的文本属性和异常的消息属性,告诉用户他需要知道的一切。谢谢!我已经添加了我的答案,它是有效的,谢谢你的帮助,汉斯!不,不要那样做。捕获特定的异常,不要假设您将得到的唯一异常是因为服务未安装而生成的。例如,用户可能没有足够的权限使用ServiceController。你的信息让他没有希望找出真正的问题所在。总是使用ex.Message我不熟悉ex.Message-我想这是为了捕捉错误字符串?然而,我不知道如果找不到它会有什么错误。