1

ServiceController を使用して Windows サーバーを再起動しています。これが私のC#コードです。

ServiceController service = new ServiceController("ServiceName");   
service.Stop();
service.WaitForStatus(ServiceControllerStatus.Stopped, 15000);
service.Start();
service.WaitForStatus(ServiceControllerStatus.Running, 15000);

サービス「ServiceName」が存在しない場合、例外がスローされますが、これは問題ありません。
しかし、サーバーでは、「ServiceName」のサービスが存在しない場合、このコードを実行する必要があります。例外は発生せず、コードはここでスタックしました。

service.Stop();

そしてそれは永遠に待っています...結果として、私はこれを捕まえることができず、何もできません。
誰でも私を助けることができますか?

4

1 に答える 1

1

コードがサービスを見つけられない場合に例外に頼る代わりに、次のようにします。

    ServiceController service = ServiceController.GetServices()
        .Where(s => s.ServiceName == "ServiceName")
        .SingleOrDefault();

    if (service != null)
    {
        service.Stop();
        service.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(15));
        service.Start();
        service.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(15));
    }
    else
    {
        // Couldn't find service
    }

注: ServiceControllerStatus.WaitForStaus 署名をタイムスパンを使用するように変更する必要がありました

于 2011-04-14T14:26:22.607 に答える