【发布时间】:2011-12-21 08:09:46
【问题描述】:
我希望能够检查某个服务是否正在运行(比如它有一个显示名称 - ServiceA)。我希望我的程序每 5 分钟检查一次服务是否仍在运行。如果没问题,它将循环并等待另外 5 分钟,然后再次检查。如果它发现 ServiceA 已停止,我希望程序给我发电子邮件并说...ServiceA 已停止运行。下面我有到目前为止我已经完成的代码,它能够将所有当前正在运行的服务和实际的显示名称拉回控制台。有人对我上面需要的代码/逻辑有任何想法吗?
namespace ServicesChecker
{
class Program
{
static void Main(string[] args)
{
ServiceController[] scServices;
scServices = ServiceController.GetServices();
Console.WriteLine("Services running on the local computer:");
foreach (ServiceController scTemp in scServices)
{
if (scTemp.Status == ServiceControllerStatus.Running)
{
Console.WriteLine();
Console.WriteLine(" Service : {0}", scTemp.ServiceName);
Console.WriteLine(" Display name: {0}", scTemp.DisplayName);
}
}
//Create a Pause....
Console.ReadLine();
}
}
}
【问题讨论】:
-
检查器停止运行时会发生什么...!
-
Windows 已经可以为您做到这一点。当服务停止或失败时,您无需编写应用程序来触发操作。
-
@Cody:Windows 能做到这一点吗?
-
@abatishchev:在“服务”管理器 (
services.msc) 中,右键单击服务,然后切换到“恢复”选项卡。您可以要求 Windows 在服务的第一次、第二次和后续失败时执行各种操作,包括启动应用程序。没有理由编写轮询的应用程序。连续轮询几乎总是错误的解决方案。 -
@Cody - 如果服务失败,是否可以将其配置为发送电子邮件?
标签: c# .net windows windows-services