C# 在使用C的windows服务中,在服务onStart()之后未命中类构造函数

C# 在使用C的windows服务中,在服务onStart()之后未命中类构造函数,c#,windows-services,C#,Windows Services,在下面的代码片段中,我尝试测试一个windows服务,但遇到了一个问题,即在执行onStart方法后,类构造函数没有被调用。我试图调试服务,我想征求专家的意见 public partial class ServiceTest : ServiceBase { public ServiceTest() { InitializeComponent(); if (!System.Diagnostics.EventLog.SourceExists("Serv

在下面的代码片段中,我尝试测试一个windows服务,但遇到了一个问题,即在执行onStart方法后,类构造函数没有被调用。我试图调试服务,我想征求专家的意见

public partial class ServiceTest : ServiceBase
{
    public ServiceTest()
    {
        InitializeComponent();
        if (!System.Diagnostics.EventLog.SourceExists("ServiceTest Source"))
        {
            System.Diagnostics.EventLog.CreateEventSource(
            "ServiceTest Source", "ServiceTest Log");
        }
        eventLog1.Source = "ServiceTest Source";
        eventLog1.Log = "ServiceTest Log";
    }

    protected override void OnStart(string[] args)
    {
        eventLog1.WriteEntry("ServiceTest service started on " + DateTime.Now.ToString());


        System.Diagnostics.Debugger.Launch();

        string ProcessHour = ConfigurationManager.AppSettings["ProcessHour"];
        int intProcessHour = Convert.ToInt32(ProcessHour);

        DateTime dtNow = DateTime.Now;

        if (dtNow.Hour < intProcessHour)
        {
            DateTime dtToday = DateTime.Today;
            DateTime dtStartDateTime = dtToday.AddHours(Convert.ToDouble(ProcessHour));
            System.TimeSpan diff = dtStartDateTime.Subtract(DateTime.Now);
            timer1.Interval = diff.TotalMilliseconds;
            timer1.Start();
        }
        else
        {
            DateTime dtToday = DateTime.Today;
            DateTime dtStartDateTime = dtToday.AddDays(1).AddHours(Convert.ToDouble(ProcessHour));
            System.TimeSpan diff = dtStartDateTime.Subtract(DateTime.Now);
            timer1.Interval = diff.TotalMilliseconds;
            timer1.Start();
        }
    }

    protected override void OnStop()
    {
        eventLog1.WriteEntry("ServiceTest service stopped on " + DateTime.Now.ToString());
    }

    private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        try
        {

            timer1.Stop();

            string StartTimer, EndTimer;
            StartTimer = DateTime.Now.ToString();
            eventLog1.WriteEntry("ServiceTest timer1_Elapsed begin on " + DateTime.Now.ToString());
            /*Some Logic*/
        }

        catch (Exception ex)
        {

        }

    }
}

将在OnStart方法之前而不是之后调用服务构造函数


OnStart与任何其他c方法一样,除非是静态的,否则将在类实例上调用,所以在构造函数之后。

听起来不错。但是,在调试代码时,它只是在启动时启动,甚至没有调用timer\u ElapsedWell,看起来您并没有在任何地方调用timer\u elapsed。你忘了发一段代码了吗?可能是计时器定义?onStart之后不调用构造函数这一事实是正常的。然而,若曾经调用过onStart,那个么很明显,构造函数以前也被调用过。在创建实例之前,您不能执行实例方法。是的,是真的,但在调试时,它不会命中其他方法,如timer\u Elapsed。这里没有问题,而且您从未调用timer\u Elapsed。我应该在onStart中调用它吗?它合法吗?实际上,我看不到任何定义timer1的代码。