当前位置:  开发笔记 > 编程语言 > 正文

如何验证Windows服务是否正在运行

如何解决《如何验证Windows服务是否正在运行》经验,为你挑选了2个好方法。

我在C#中运行了一个应用程序(在嵌入式XP上运行的2.0),它与作为Windows服务实现的"监视程序"进行通信.设备启动时,此服务通常需要一些时间才能启动.我想从我的代码中检查服务是否正在运行.我怎么能做到这一点?



1> Carl..:

我猜这样的事情会起作用:

添加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对象.


ServiceController.GetServices()检索包含作为ServiceController对象的所有已安装服务的数组.这可能会有很大帮助.
sc.WaitforStatus()正是我所需要的.谢谢
添加对System.ServiceProcess的引用并添加语句:using System.ServiceProcess;
如果我传递了一个糟糕的服务名称,它似乎锁定而不是抛出错误.我添加了这段代码:catch(System.Exception ex){return"Not found"; }
NealWalters:你怎么知道因为找不到服务而抛出了异常?是不是有更合适的异常类型可以捕获?
private static bool ServiceExists(string serviceName){return ServiceController.GetServices().FirstOrDefault(s => s.ServiceName == serviceName)!= null; }

2> rhatwar007..:

在这里,您可以在本地计算机上获得所有可用服务及其状态.

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

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有