C# 在使用C的windows服务中,在服务onStart()之后未命中类构造函数
在下面的代码片段中,我尝试测试一个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
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的代码。