194

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

4

2 に答える 2

396

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

プロジェクト参照に追加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()最初に電話する必要があります。

参照: .NET のServiceControllerオブジェクト。

于 2008-10-07T12:10:39.240 に答える
19

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

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

于 2014-06-24T07:48:58.367 に答える