.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-我想这是为了捕捉错误字符串?然而,我不知道如果找不到它会有什么错误。