C# 正在运行的Windows服务没有执行任何操作

C# 正在运行的Windows服务没有执行任何操作,c#,.net,windows-services,C#,.net,Windows Services,我的服务正在运行,但它不执行我在OnStart中插入的任何逻辑, 此外,我尝试将消息记录到eventviewer,但它甚至没有记录到该部分(我假设这是在OnStart之前发生的…) 有人能告诉我我做错了什么吗?谢谢 public partial class DSGService : ServiceBase { private static string ftpPath = ConfigurationManager.AppSettings["FtpPath"];

我的服务正在运行,但它不执行我在OnStart中插入的任何逻辑, 此外,我尝试将消息记录到eventviewer,但它甚至没有记录到该部分(我假设这是在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());
        }
启动逻辑

        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;
                    }
写入eventviewer

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

这可能是
timerecursed
方法内部的异常导致的,该异常会阻止计时器重新启动。为了避免这种情况,以下是您要做的:

  • 将计时器的
    AutoReset
    属性设置为
    false

  • timerecursed
    事件处理程序中的
    finally
    子句中,再次启动计时器


  • 这意味着,即使在
    timerecursed
    事件处理程序中发生异常,计时器也会再次启动。

    这是否回答了您的问题?由于所有操作都已完成,因此需要设置bool并调用
    WriteToEventViewer
    ,我的赌注是
    WriteToEventViewer
    方法,该方法在try块之前调用。因此,OP可能还希望加强该方法本身。System.Diagnostics.EventLog需要提升权限(请参阅),因此它可能会在WriteToEventViewer中引发权限异常。