C# 如何自行重新启动Windows服务C
我创建了一个服务,通过MSMQ向该服务发送命令 现在我需要重新启动服务,但当它到达stop命令时,它只是抛出错误,或者在执行此任务的服务停止时,它无法读取下一行 我使用的代码是:C# 如何自行重新启动Windows服务C,c#,windows-services,C#,Windows Services,我创建了一个服务,通过MSMQ向该服务发送命令 现在我需要重新启动服务,但当它到达stop命令时,它只是抛出错误,或者在执行此任务的服务停止时,它无法读取下一行 我使用的代码是: ServiceController service = new ServiceController(serviceName); try { int millisec1 = Environment.TickCount;
ServiceController service = new ServiceController(serviceName);
try
{
int millisec1 = Environment.TickCount;
TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds);
ShutdownService(serviceName, timeoutMilliseconds);
// count the rest of the timeout
int millisec2 = Environment.TickCount;
timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds - (millisec2 - millisec1));
service.Start();
service.WaitForStatus(ServiceControllerStatus.Running, timeout);
}
catch (Exception ex)
{
s_log.Error(ex);
}
如何按逻辑重新启动服务当服务停止时,它将不会执行下一行代码。右键单击服务并选择其属性,然后选择恢复选项卡。将服务设置为在第一次出现故障后重新启动。然后,要重新启动服务,只需调用Environment.Exit1,Windows将重新启动服务。请查看此链接我仅从此链接中选择了此代码。但是当我试图停止服务时,它被释放,当我试图访问服务对象时,它再次抛出错误:为什么需要重新启动服务?我猜你做错了什么。这是基于我系统中影响我服务的一些参数。因此,当参数改变时,我需要我的服务来发挥这些作用。我的目标是OP应该尝试从不同的方向来解决问题。与其持续关闭并重新启动服务,不如允许服务持续运行,但为其提供System.Timers.Timer\u Timer成员。您可以将_timer.Interval设置为Environment.TickCount,并将ElapsedEventHandler添加到_timer.eassed。然后你可以在ElapsedEventHandler中按照你在Environment.TickCount中设置的频率做任何你想做的事情,而不必试图让你的服务死而复生,就像一个疯狂的僵尸!不,我在我的web应用程序中有一个选项,它将触发msg服务,然后从MSMQ中选择msg并初始化重启。发生的情况是,它停止了服务,但随后什么也没做。首先,你应该应用“关注点分离”的原则。服务不应自行重新启动。我建议另一个服务读取msmq并使用ServiceManager类重新启动相关服务。那么,一旦服务被标记为stopped,它就不会读取服务中写入的任何代码了吗?问题是,首先为什么要重新启动服务,除非它是用于部署新代码。但如果我必须这样做,我将有一个单独的服务来执行重启。