C# 如何自行重新启动Windows服务C

C# 如何自行重新启动Windows服务C,c#,windows-services,C#,Windows Services,我创建了一个服务,通过MSMQ向该服务发送命令 现在我需要重新启动服务,但当它到达stop命令时,它只是抛出错误,或者在执行此任务的服务停止时,它无法读取下一行 我使用的代码是: ServiceController service = new ServiceController(serviceName); try { int millisec1 = Environment.TickCount;

我创建了一个服务,通过MSMQ向该服务发送命令

现在我需要重新启动服务,但当它到达stop命令时,它只是抛出错误,或者在执行此任务的服务停止时,它无法读取下一行

我使用的代码是:

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,它就不会读取服务中写入的任何代码了吗?问题是,首先为什么要重新启动服务,除非它是用于部署新代码。但如果我必须这样做,我将有一个单独的服务来执行重启。