私の職場には、いくつかの Windows サービスをサーバーにインストールするアプリケーションがあります。サイド プロジェクトとして、各サービスの名前の横にある "ライト" (赤または緑のドットが付いた画像ボックス) でこれらのサービスを一覧表示する単純な GUI を作成するように依頼されました。これらのサービスの実行が停止した場合、「ライト」が緑から赤に変わるという考えです。
GUI パーツを作成し、リモート サーバーのサービスをクエリして、関心のあるサービスの配列と比較し、サービスの状態に応じて各サービスの横にある「ライト」を緑/赤に設定します。私がハングアップしている部分は、これらのサービスをリアルタイムで監視する方法ですか? 現在、Form_Load イベントに次のコードがあります。
Dim myConnectionOptions As New System.Management.ConnectionOptions
With myConnectionOptions
.Impersonation = System.Management.ImpersonationLevel.Impersonate
.Authentication = System.Management.AuthenticationLevel.Packet
End With
Try
Dim myManagementScope As System.Management.ManagementScope
myManagementScope = New System.Management.ManagementScope("\\" & SERVERNAME & "\root\cimv2", myConnectionOptions)
myManagementScope.Connect()
Dim query As New Management.ObjectQuery("SELECT * FROM Win32_Service")
Dim searcher As New Management.ManagementObjectSearcher(myManagementScope, query)
Dim i As Integer = 0
For Each queryObj As Management.ManagementObject In searcher.Get()
For Each service As String In arrServices
If queryObj("DisplayName").Equals(service) Then
If queryObj("State").Equals("Stopped") Then
arrLights(i).Image = My.Resources.redlight
End If
i += 1
End If
Next
Next
Catch err As Management.ManagementException
MessageBox.Show("WMI query failed with the following error: " & err.Message)
Catch unauthorizedErr As System.UnauthorizedAccessException
MessageBox.Show("Authentication error: " & unauthorizedErr.Message)
End Try
このコードを繰り返し実行する単純なタイマーが最善の方法でしょうか、それとももっと洗練された解決策がありますか? 私は VB.NET と WMI の経験は少しありますが、このようなリアルタイムの監視活動の経験はありません。