如何自行重启Windows服务C#

Moi*_*oiz 3 c# windows-services

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

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

我正在使用的代码是:

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);
            }
Run Code Online (Sandbox Code Playgroud)

我怎样才能自行重新启动服务,因为从逻辑上讲,当服务停止时,它不会执行下一行代码。

小智 5

右键单击该服务并选择其属性,然后选择恢复选项卡。将服务设置为在第一次失败后重新启动。然后要重新启动服务,只需调用Environment.Exit(1)Windows就会重新启动该服务。

  • 我的看法是,OP 应该尝试从不同的方向解决问题。与其不断关闭并重新启动服务,不如让服务持续运行,但为其提供一个 System.Timers.Timer _timer 成员。您可以将 _timer.Interval 设置为 Environment.TickCount 并将 ElapsedEventHandler 添加到 _timer.Elapsed。然后,您可以按照您在Environment.TickCount中设置的频率在ElapsedEventHandler中做任何您想做的事情,而无需尝试让您的服务像疯狂的僵尸一样死亡和复活! (2认同)