首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

windows服务项目,运作一段时间自动停止。找不到原因

2012-09-05 
windows服务项目,运行一段时间自动停止。找不到原因。在配置文件中设置了,按天和按小时。按小时,跑了几个小时

windows服务项目,运行一段时间自动停止。找不到原因。
在配置文件中设置了,按天和按小时。
按小时,跑了几个小时都没啥问题。按天,早上4点钟运行。竟然提前服务停止了。。打不到原因。也不知道如何查原因。
代码如下:
 protected override void OnStart(string[] args)
  {
  // TODO: 在此处添加代码以启动服务。
  CDataLog.WriteValueToFile(Global.fileLog, "-------开始定时任务------"+DateTime.Now.ToString());
  try
  {
  Thread t = new Thread(new ThreadStart(TimeTask));
  t.Start();
  CDataLog.WriteValueToFile(Global.fileLog, "-------开始进程------" + DateTime.Now.ToString());
   
  }
  catch (Exception ex)
  {
  CDataLog.WriteValueToFile(Global.fileLog, ex.ToString());
  }
  CDataLog.WriteValueToFile(Global.fileLog, "-------结束定时任务------" + DateTime.Now.ToString());

   
  }

  protected override void OnStop()
  {
  // TODO: 在此处添加代码以执行停止服务所需的关闭操作。
  //timer.Stop();
  try
  {
  CDataLog.WriteValueToFile(Global.fileLog, "-------结束服务------" + DateTime.Now.ToString());
  }
  catch (Exception ex)
  {
  CDataLog.WriteValueToFile(Global.fileLog, "结束任务"+ex.ToString());
  }
  }

//
 private void TimeTask()
  {
  while (true)
  {
  AppConfig config = new AppConfig();
  //不推送的日期为1日。
  int notPushTime = Convert.ToInt32(config.getNotPushTime());
  // DateTime d1 = new DateTime(now.Year, now.Month, 1);


  //按天,startTime:当天-1,endTime:当天 
  //按小时,startTime:当前-1小时,endTime:当前小时0分。
  // 推送状态 
   
  int hour = DateTime.Now.Hour;
  DateTime notPushDt = new DateTime(DateTime.Now.Year, DateTime.Now.Month, notPushTime);
  string cycle = config.getCycleTimeByConfig();
  string tempDt = DateTime.Now.ToString("yyyy-MM-dd");
  DateTime startTime;
  DateTime endTime;
  //按天,startTime:当天-1,endTime:当天 
  //按小时,startTime:当前-1小时,endTime:当前小时0分。
   
  if (string.Equals(cycle, "day"))
  {
  endTime = DateTime.Parse(tempDt);
  startTime = DateTime.Parse(tempDt).AddDays(-1);
  CDataLog.WriteValueToFile(Global.fileLog, "---按天"+DateTime.Now.ToString()+"----");
  }
  else
  {
  endTime = DateTime.Parse(tempDt + " " + DateTime.Now.Hour.ToString() + ":00 ");
  startTime = endTime.AddHours(-1);
  CDataLog.WriteValueToFile(Global.fileLog, "---按小时"+DateTime.Now.ToString()+"----");
  }
  BussinessData bussisData = new BussinessData();
  double inteval = double.Parse(new AppConfig().getInterval());
  if (notPushDt.CompareTo(Convert.ToDateTime(DateTime.Now.ToString("yy/MM/dd"))) != 0)
  {
  //上传不成功的。
  if (bussisData.getSuccess(startTime, endTime) ==1)


  {
  timer_Elapsed(startTime, endTime);
  }
  //还没上传的。
  else if(bussisData.getSuccess(startTime, endTime) ==0 )
  {
  //定时任务以早上4点为默认值 。
  int defaultTime = Convert.ToInt32(config.getDefaultTime());
  if (string.Equals(cycle, "day") && hour == defaultTime)
  {

  //timer.Interval = inteval;
  //timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
  //timer.Enabled = true;
  timer_Elapsed(startTime, endTime);
  // Thread.Sleep(Convert.ToInt32(inteval));

  }
  else if (!string.Equals(cycle, "day"))
  {
  //timer.Interval = inteval;
  //timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
  //timer.Enabled = true;
  timer_Elapsed(startTime, endTime);
  //Thread.Sleep(Convert.ToInt32(inteval));
  }
  }
  Thread.Sleep(Convert.ToInt32(inteval));
  }
  else
  {
  Thread.Sleep(Convert.ToInt32(inteval));
  }
  }
  }

public void timer_Elapsed(DateTime startTime,DateTime endTime)
  {
  Task task = new Task();
  task.runTask(startTime,endTime);
  }

[解决办法]
是不是以system用户来跑的,如果是其它用户,可能会有此问题
[解决办法]
记录日志,或者事件查看器里看看可能会是什么原因

热点排行