服务.状态显示停止,即使在服务管理器中它显示为启动
本文关键字:服务 显示 管理器 启动 状态 | 更新日期: 2023-09-27 18:08:40
我有一个控制台应用程序,在我开发时为我启动和停止大量服务。
当启动许多服务时,它很好,但有一个服务我有问题。它是一个MySQL数据库服务。这是我的代码。我没有使用service.WaitForStatus
,这样我可以做一些额外的记录。服务只是显示状态为停止,即使当我在服务GUI中检查它显示状态启动。
var service = new ServiceController(serviceName);
switch (service.Status)
{
case ServiceControllerStatus.Stopped:
service.Start();
var servicesStarted = false;
while (!servicesStarted)
{
sb.Append("Status of : ");
sb.Append(serviceName);
sb.Append(" is ");
sb.Append(service.Status);
log.Info(sb.ToString());
sb.Clear();
servicesStarted = service.Status == ServiceControllerStatus.Running;
Thread.Sleep(500);
}
break;
}
需要调用service.Refresh()
刷新状态
.net包装器缓存来自服务的状态信息,可能是因为每次查询数据的成本很高。
方法WaitForStatus()
为你照顾刷新,但如果你不想使用它,你必须手动刷新。
WaitForStatus实际使用的代码是
DateTime utcNow = DateTime.UtcNow;
this.Refresh();
while (this.Status != desiredStatus)
{
if (DateTime.UtcNow - utcNow > timeout)
throw new System.ServiceProcess.TimeoutException(Res.GetString("Timeout"));
Thread.Sleep(250);
this.Refresh();
}