当前位置: 首页 > 知识库问答 >
问题:

Windows服务不断启动和停止

宇文鸣
2023-03-14

启动Windows服务时不断遇到此错误消息

本地计算机上的服务启动后停止。如果其他服务和程序不使用某些服务,它们会自动停止。

我的代码:

     protected override void OnStart(string[] args)
     {
        string eventLogMessage = string.Format(@"Notify Service is starting :{0}", DateTime.Now);
        EventLogging.LogInformation(eventLogMessage);

            double interval;

            try
            {
                interval = Convert.ToDouble(ConfigurationManager.AppSettings["intervalInSeconds"]);
                EventLogging.LogInformation(
                    string.Format("Loaded configuration: Interval duration is {0} minutes", (interval / 60)));
            }
            catch (Exception exception)
            {
                interval = 3600;

                eventLogMessage = string.Format("Loading configuration failed: Interval duration is {0} minutes", (interval / 60));
                eventLogMessage += string.Format("\nMessage was: {0}", exception.Message);

                EventLogging.LogWarning(eventLogMessage);
            }

            interval = interval * 1000;

            _timer.Interval = interval;
            _timer.Elapsed += TimerTick;
            _timer.Start();

            eventLogMessage = string.Format(@"Notify service has started: {0}", DateTime.Now);
            EventLogging.LogInformation(eventLogMessage);

            var workerThread = new Thread(NotifyUsers) { IsBackground = true };
            workerThread.Start();

    }

    private void NotifyUsers()
    {
        var userBL = new UserBL();

        List<User> usersToBeMailed = userBL.GetAllUsersWhosePasswordsWillExpire();

        string eventLogMessage = string.Format("Number of users to be mailed is {0}", usersToBeMailed.Count);
        EventLogging.LogInformation(eventLogMessage);

        foreach (User user in usersToBeMailed)
        {
            userBL.MailUser(user);
        }
    }

    private void TimerTick(object sender, ElapsedEventArgs e)
    {
        var workerThread = new Thread(NotifyUsers) { IsBackground = true };
        workerThread.Start();
    }

    protected override void OnStop()
    {
        base.OnStop();

        string eventLogMessage = @"Password notify service has stopped: " + DateTime.Now;

        EventLogging.LogInformation(eventLogMessage);
    }


    protected override void OnPause()
    {
        base.OnPause();
        _timer.Stop();
        EventLogging.LogWarning("Paused");
    }

    protected override void OnContinue()
    {
        base.OnContinue();
        _timer.Start();
        EventLogging.LogInformation("Resumed");
    }
}

共有1个答案

从渊
2023-03-14

你必须至少有一个线程在做某事,而不是作为后台线程,以保持进程的活力。运行OnStart代码的线程实际上不是您的线程之一,此外,您必须从OnStart返回才能被视为已成功启动。

这可以像从您的OnStart方法创建并运行一个新的Thread一样简单,该方法只需等待您从OnStop代码设置的ManualResetEvent对象。

或者,为这个线程找到一些有用的工作来做(但是仍然使用事件对象来指示它何时应该关闭),或者选择二——考虑这段代码是否属于服务。如果它只是定期唤醒来通知用户,为什么不改用计划任务呢?

 类似资料:
  • 我已经从以下网站下载了“jenkins-1.501.zip”http://jenkins-ci.org/content/thank-you-downloading-windows-installer . 我已经解压缩了zip文件并成功地在Windows7上安装了Jenkins。詹金斯在好的。我想从控制台停止Jenkins服务。我该怎么做?通过控制台/命令行启动和重新启动的方式是什么?

  • 问题内容: 我已经从http://jenkins-ci.org/content/thank-you-downloading-windows- installer 下载了“ jenkins-1.501.zip” 。 我已经解压缩了zip文件,并在Windows 7上成功安装了Jenkins。詹金斯的表现不错。我想从控制台停止Jenkins服务。我怎样才能做到这一点?通过控制台/命令行启动和重新启动的

  • 本文向大家介绍基于C#实现Windows服务状态启动和停止服务的方法,包括了基于C#实现Windows服务状态启动和停止服务的方法的使用技巧和注意事项,需要的朋友参考一下 本文以实例形式展示了基于C#实现Windows服务状态启动和停止服务的方法。非常实用。分享给大家供大家参考之用。具体方法如下: 首先先引用: 然后在引用命名空间: 建立服务对象: 服务运行则停止服务: 服务停止则启动服务: 希望

  • Jenkins作为一项windows服务,已经运行了几个月,没有出现任何问题。 我做了一些Jenkins更新(将一个更新的.war文件复制到.Jenkins文件夹),也进行了一些windows更新。我的版本是Jenkins 2.263.3。 我浏览了很多文档和其他StackOverflow票据,发现JENKINS_HOME环境变量缺失。我加了这个。 这是我的调查揭示的。 设置Java环境变量-见下

  • 问题内容: 我们如何从Java启动/停止Windows服务?例如,我想从Java启动和停止mysql Windows服务。 如果可以启动/停止,那么是否可以知道服务是否成功启动? 问题答案: 您可以使用字符串数组来制定命令提示符脚本来启动,停止和检查服务状态: 使用以下命令执行脚本:

  • 我已将spring-boot应用程序部署到IIS/嵌入式tomcat,作为一个azure应用程序服务。当应用程序服务启动时,应用程序日志显示同一实例大约每10分钟发生一次重新启动(新的pid)。90分钟后,它将最终成功部署。我从嵌入的tomcat日志和org.springframework日志中看不到任何问题,但有时它可能在2分钟内开始。 我还可以在哪里查找启动错误,有没有办法增加应用服务启动时间