- 创建一个Windows服务项目:解决方案(右击)——> 添加 ——> 新建项目——>项目类型选择Windows——>模板选择Windows服务 ,如图:
- 编写Windows服务程序
创建后会生成两个文件 Program.cs 和 Service1.cs(我已重命名为MyService.cs),编写服务内容:
具体服务代码:View Code1 using System; 2 using System.Configuration; 3 using System.ServiceProcess; 4 using System.Threading; 5 6 namespace WindowsServiceTest 7 { 8 public partial class MyService : ServiceBase 9 { 10 11 private Thread _thread = null; 12 private bool serviceIsRun = false; // 是否一直运行 13 14 public MyService() 15 { 16 InitializeComponent(); 17 } 18 19 protected override void OnStart(string[] args) 20 { 21 LogHelper.WriteLog("服务启动..."); 22 serviceIsRun = true; 23 _thread = new Thread(CheckSrv); 24 _thread.Start(); 25 } 26 27 protected override void OnStop() 28 { 29 serviceIsRun = false; 30 LogHelper.WriteLog("服务停止..."); 31 } 32 33 protected void CheckSrv() 34 { 35 var beginTime = ConfigurationManager.AppSettings["BeginTime"]; 36 var endTime = ConfigurationManager.AppSettings["EndTime"]; 37 while (serviceIsRun) 38 { 39 try 40 { 41 if (IsRunTime(beginTime, endTime)) 42 { 43 // TODO: 44 for (int i = 0; i < 10; i++) 45 { 46 if (!IsRunTime(beginTime, endTime)) 47 { 48 Thread.Sleep(1000 * 2); 49 } 50 else 51 { 52 LogHelper.WriteLog("当前数字:" + i); 53 } 54 } 55 } 56 else 57 { 58 Thread.Sleep(1000 * 5); 59 LogHelper.WriteLog("未达到服务执行时间..."); 60 } 61 } 62 catch (Exception ex) 63 { 64 LogHelper.WriteLog("服务发生异常:" + ex.ToString()); 65 } 66 } 67 } 68 69 /// <summary> 70 /// 判断程序是否在设置运行时间内 71 /// </summary> 72 /// <param name="startTime">开始执行时间</param> 73 /// <param name="overTime">执行结束时间</param> 74 /// <returns>true:在执行时间内,false:在执行时间外</returns> 75 private bool IsRunTime(string startTime, string overTime) 76 { 77 var flag = false; 78 79 var beginTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + startTime); 80 var endTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + overTime); 81 82 if (beginTime <= endTime) // 当天 83 { 84 flag = beginTime <= DateTime.Now && DateTime.Now <= endTime; 85 } 86 else // 跨天 87 { 88 var zeroTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " 00:00"); 89 flag = (beginTime <= DateTime.Now && DateTime.Now <= zeroTime.AddDays(1)) || (zeroTime <= DateTime.Now && DateTime.Now <= endTime); 90 } 91 92 return flag; 93 } 94 } 95 }
相关文章: