web-dev-qa-db-ja.com

Windowsサービスが実行されているかどうかを確認する方法

Windowsサービスとして実装されている「ウォッチドッグ」と通信しているC#(2.0 [XP]で実行されている)のアプリケーションがあります。デバイスが起動すると、通常、このサービスの開始には時間がかかります。サービスが実行されているかどうかをコードから確認したいのですが。どうすればこれを達成できますか?

167
edosoft

私はこのような何かがうまくいくと思います:

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のオブジェクト。

334
Carl

.NETの ServiceController オブジェクトをご覧ください。

20
Larry

ここでは、利用可能なすべてのサービスとそのステータスをローカルマシンで取得します。

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

12
rhatwar007