.net – 获取Windows服务启动类型?

前端之家收集整理的这篇文章主要介绍了.net – 获取Windows服务启动类型?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在System.ServiceProcess命名空间中,是否有任何类型的枚举或其他直接成员来确定ServiceController的服务的启动类型(自动,延迟自动,按需,禁用)?

我的想法是使用.NET框架类库的该命名空间(或其他命名空间)的可用成员来确定该事物,而不是查看操作系统注册表或WMI以获取服务的启动类型,因为我可以这样做,我我只是问.NET框架是否公开了一种更简单的方法来确定那件事.

用VB.Net编写的伪代码,但我也可以管理C#方法

  1. Public Shared Function GetStartType(ByVal svcName As String) As ServiceControllerStatus
  2.  
  3. Dim svc As ServiceController = (From service As ServiceController In ServiceController.GetServices()
  4. Where service.ServiceName.Equals(svcName,StringComparison.OrdinalIgnoreCase)
  5. ).FirstOrDefault
  6.  
  7. If svc Is Nothing Then
  8. Throw New ArgumentException("Any service found with the specified name.","svcName")
  9. Else
  10. Using svc
  11. ' Note that StartTypeEnumValue does not exists.
  12. Return svc.StartTypeEnumValue
  13. End Using
  14. End If
  15.  
  16. End Function
您可以使用WMI和 ManagementObject来实现此目标,基于 C# – Get Startup Type of a Service (Windows).

像这样的东西(基于链接文章中的代码).最初的例子是在C#中,所以我试图快速转换到VB.NET,但语法可能有点不对.我还将方法返回类型修改为String,因为我一旦得到它就不确定你想要对该值做什么.

不要忘记添加Imports System.Management.

  1. Public Shared Function GetStartType(ByVal svcName As String) As String
  2.  
  3. Dim startMode As String = String.Empty
  4. Dim filter As String = String.Format("SELECT StartMode FROM Win32_Service WHERE Name = '{0}'",svcName)
  5. Dim svc As ManagementObjectSearcher = New ManagementObjectSearcher(filter)
  6.  
  7. If svc Is Nothing Then
  8. Throw New ArgumentException("Any service found with the specified name.",paramName:="svcName")
  9. Else
  10. Try
  11. Dim services As ManagementObjectCollection = svc.Get()
  12.  
  13. For Each service As ManagementObject In services
  14. startMode = service.GetPropertyValue("StartMode").ToString()
  15. Next
  16. Catch ex As Exception
  17. ' Do something if needed
  18. End Try
  19. End If
  20.  
  21. Return StartMode
  22. End Function

猜你在找的Windows相关文章