Windowsサービスとして実装されている「ウォッチドッグ」と通信しているC#(2.0 [XP]で実行されている)のアプリケーションがあります。デバイスが起動すると、通常、このサービスの開始には時間がかかります。サービスが実行されているかどうかをコードから確認したいのですが。どうすればこれを達成できますか?
私はこのような何かがうまくいくと思います:
System.ServiceProcess
をプロジェクト参照に追加します([.NET]タブにあります)。
using System.ServiceProcess;
ServiceController sc = new ServiceController(SERVICENAME);
switch (sc.Status)
{
case ServiceControllerStatus.Running:
return "Running";
case ServiceControllerStatus.Stopped:
return "Stopped";
case ServiceControllerStatus.Paused:
return "Paused";
case ServiceControllerStatus.StopPending:
return "Stopping";
case ServiceControllerStatus.StartPending:
return "Starting";
default:
return "Status Changing";
}
編集:必要なステータスとタイムアウトを取得するメソッドsc.WaitforStatus()
もありますが、使用することはありませんが、ニーズに合う場合があります。
編集:ステータスを取得したら、再度ステータスを取得するには、最初にsc.Refresh()
を呼び出す必要があります。
参照: ServiceController .NETのオブジェクト。
.NETの ServiceController オブジェクトをご覧ください。
ここでは、利用可能なすべてのサービスとそのステータスをローカルマシンで取得します。
ServiceController[] services = ServiceController.GetServices();
foreach(ServiceController service in services)
{
Console.WriteLine(service.ServiceName+"=="+ service.Status);
}
ループ内でサービスとservice.nameプロパティを比較すると、サービスのステータスを取得できます。詳細については http://msdn.Microsoft.com/en-us/library/system.serviceprocess.servicecontroller.aspx また http://msdn.Microsoft.com/ en-us/library/Microsoft.windows.design.servicemanager(v = vs.90).aspx