Dot-Net
獲取 Windows 服務啟動類型?
在
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現在有一個屬性StartTypehttps://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