Dot-Net

獲取 Windows 服務啟動類型?

  • May 31, 2018

System.ServiceProcess命名空間中,是否有任何類型的列舉或其他直接成員來確定服務的啟動類型(自動、延遲自動、按需、禁用)ServiceController

這個想法是使用 .NET 框架類庫的該命名空間(或其他命名空間)的可用成員來確定該事物,而不是查看作業系統系統資料庫或 WMI 以獲取服務的啟動類型,因為我可以這樣做,我’我只是在詢問 .NET 框架是否公開了一種更簡單的方法來確定那件事。

用 VB.Net 編寫的虛擬碼,但我也可以管理 C# 方法:

Public Shared Function GetStartType(ByVal svcName As String) As ServiceControllerStatus

   Dim svc As ServiceController = (From service As ServiceController In ServiceController.GetServices()
        Where service.ServiceName.Equals(svcName, StringComparison.OrdinalIgnoreCase)
       ).FirstOrDefault

   If svc Is Nothing Then
       Throw New ArgumentException("Any service found with the specified name.", "svcName")
   Else
       Using svc
           ' Note that StartTypeEnumValue does not exists.
           Return svc.StartTypeEnumValue
       End Using
   End If

End Function

如果可能,請將您的項目目標 .NET 框架設置為 4.6.1 或更高版本。該類ServiceController現在有一個屬性StartType

https://msdn.microsoft.com/en-us/library/system.serviceprocess.servicecontroller(v=vs.110).aspx

您可以使用 WMI 和ManagementObject來實現這一點,基於C# – Get Startup Type of a Service (Windows)

像這樣的東西(基於連結文章中的程式碼)。原始範例是用 C# 編寫的,因此我嘗試快速將其快速轉換為 VB.NET,但語法可能有點錯誤。我還將方法返回類型修改為String因為我不確定一旦獲得該值你想對它做什麼。

不要忘記添加Imports System.Management.

Public Shared Function GetStartType(ByVal svcName As String) As String

   Dim startMode As String = String.Empty
   Dim filter As String = String.Format("SELECT StartMode FROM Win32_Service WHERE Name = '{0}'", svcName)
   Dim svc As ManagementObjectSearcher = New ManagementObjectSearcher(filter)

   If svc Is Nothing Then
       Throw New ArgumentException("Any service found with the specified name.", paramName:="svcName")
   Else
       Try
           Dim services As ManagementObjectCollection = svc.Get()

           For Each service As ManagementObject In services
               startMode = service.GetPropertyValue("StartMode").ToString()
           Next
       Catch ex As Exception
           ' Do something if needed
       End Try
   End If

   Return StartMode
End Function

引用自:https://stackoverflow.com/questions/29620205