Windows 服务 运行 没有做任何事

Windows service running not doing anything

我的服务是 运行 但它不执行我在 OnStart 中插入的任何逻辑, 此外,我尝试将消息记录到事件查看器,但它甚至没有到达那部分(我假设它在 OnStart 之前下降..) 有人可以告诉我我做错了什么吗?谢谢,

 public partial class DSGService : ServiceBase
    {
        private static string ftpPath = ConfigurationManager.AppSettings["FtpPath"];
        private Timer _timer;
        private bool _isRunning;

        public DSGService()
        {
            InitializeComponent();
            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;

        }

        private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            WriteToEventViewer("error!:" + e.ExceptionObject.ToString());
        }

OnStart 逻辑

        protected override void OnStart(string[] args)
        {
            _isRunning = false;
            _timer = new Timer
            {
                AutoReset = true,
                Interval = 5000,

            };
            _timer.Elapsed += new ElapsedEventHandler(this.TimerElapsed);
            _timer.Start();
        }

做事的代码

        private void TimerElapsed(object sender, ElapsedEventArgs e)
        {
            if (_isRunning)
            {
                WriteToEventViewer("isrunning is true");
                return;
            }

            try
            {
                _isRunning = true;
                WriteToEventViewer("started");
                //do things..
                    WriteToEventViewer("generated!");
                }

            }
            finally
            {
                _isRunning = false;
                WriteToEventViewer("done");
            }
        }
        private void GenerateAndPublishData(ServerData server)
        {
            try
            {
//do things...

            }
            catch (Exception ee)
            {
                WriteToEventViewer(string.Format("error: {0}", ee);
            }
        }
        protected override void OnStop()
        {

            _timer.Stop();
            _timer.Dispose();
            _timer = null;
                    }

写入事件查看器

        private void WriteToEventViewer(string msg)
        {
            using (EventLog eventLog = new EventLog("DSGService"))
            {
                eventLog.Source = "DSGService";
                eventLog.WriteEntry(msg, EventLogEntryType.Information, 101, 1);
            }
        }
    }```

这可能是 TimerElapsed 方法内部发生异常导致计时器无法重新启动的结果。为避免这种情况,您可以执行以下操作:

  1. 将定时器的 AutoReset 属性 设置为 false

  2. TimerElapsed 事件处理程序中,在 finally 子句中,再次启动计时器。

这意味着即使在您的 TimerElapsed 事件处理程序中发生异常,计时器也会重新启动。