1. 创建一个Windows服务项目:解决方案(右击)——> 添加 ——> 新建项目——>项目类型选择Windows——>模板选择Windows服务 ,如图:
  2. 编写Windows服务程序
    创建后会生成两个文件 Program.cs 和 Service1.cs(我已重命名为MyService.cs),编写服务内容:

    具体服务代码:
    1. 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 = ; i < ; i++)
    45. {
    46. if (!IsRunTime(beginTime, endTime))
    47. {
    48. Thread.Sleep( * );
    49. }
    50. else
    51. {
    52. LogHelper.WriteLog("当前数字:" + i);
    53. }
    54. }
    55. }
    56. else
    57. {
    58. Thread.Sleep( * );
    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()) || (zeroTime <= DateTime.Now && DateTime.Now <= endTime);
    90. }
    91.  
    92. return flag;
    93. }
    94. }
    95. }

    配置文件:

    1. <?xml version="1.0" encoding="utf-8" ?>
    2. <configuration>
    3. <appSettings>
    4. <add key="LogPath" value="Log"/>
    5. <add key="BeginTime" value="10:28"/>
    6. <add key="EndTime" value="10:38"/>
    7. </appSettings>
    8. </configuration>

    日志代码:

    1. using System;
    2. using System.Configuration;
    3. using System.IO;
    4. using System.Text;
    5.  
    6. namespace WindowsServiceTest
    7. {
    8. internal class LogHelper
    9. {
    10. /// <summary>
    11. /// 记录日志
    12. /// </summary>
    13. /// <param name="logContext">日志内容</param>
    14. public static void WriteLog(string logContext)
    15. {
    16. var logPath = AppDomain.CurrentDomain.BaseDirectory + ConfigurationManager.AppSettings["LogPath"].ToString();
    17. if (!Directory.Exists(logPath))
    18. {
    19. Directory.CreateDirectory(logPath);
    20. }
    21. var filePath = logPath + "\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
    22. var fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write);
    23. var m_streamWriter = new StreamWriter(fs);
    24. m_streamWriter.BaseStream.Seek(, SeekOrigin.End);
    25. var sb = new StringBuilder();
    26. if (!string.IsNullOrEmpty(logContext))
    27. {
    28. sb.Append(Environment.NewLine);
    29. sb.Append(logContext);
    30. }
    31. sb.Append(" "+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff")+Environment.NewLine);
    32. m_streamWriter.WriteLine(sb.ToString());
    33. m_streamWriter.Flush();
    34. m_streamWriter.Close();
    35. fs.Close();
    36. }
    37. }
    38. }

.Net 指定时间段内定时执行的Windows服务(System.Threading.Thread)的更多相关文章

  1. 【.Net 学习系列】-- .Net 指定时间段内定时执行的Windows服务(System.Threading.Thread)

    创建一个Windows服务项目:解决方案(右击)——> 添加 ——> 新建项目——>项目类型选择Windows——>模板选择Windows服务 ,如图: 编写Windows服务 ...

  2. .net 开发定时执行的windows服务

    环境:win7+vs2010+Oracle11g+office2010(64位操作系统) 需求:开发定时执行的windows服务从数据库中查询数据下载到指定地址Excel中 一.添加新建项目——win ...

  3. C#制作Windows service服务系列二:演示一个定期执行的windows服务及调试(windows service)

    系列一: 制作一个可安装.可启动.可停止.可卸载的Windows service(downmoon原创) 系列二:演示一个定期执行的windows服务及调试(windows service)(down ...

  4. paraview显示指定时间段的时均图(两种方法)

    方法一: 首先计算以后会得到每个时刻的网格数据,如下图: 但是我们只想要比如最后2s的数据,如果直接导入,paraview会把从0s时刻的数据全部加载,做时均图的时候也就是对整个时间段做时均,不是我们 ...

  5. Windows服务 System.ServiceProcess.ServiceBase类

    一.Windows服务 1.Windows服务应用程序是一种需要长期运行的应用程序,它适合服务器环境. 2.无用户界面,任何消息都会写进Windows事件日志. 3.随计算机启动而启动,不需要用户一定 ...

  6. Windows服务System权限下在当前用户桌面创建快捷方式C#实例程序

    Windows服务一般运行在System权限下,这样权限比较高,方便执行一些高权限的操作. 但是,Environment.GetFolderPath等函数获取的也是System用户下的,而不是当前用户 ...

  7. ajax跨域POST时执行OPTIONS请求服务端返回403forbidden的解决方法

    ajax访问服务端restful api时,由于contentType类型的原因,浏览器会先发送OPTIONS请求. 本人服务端用的是spring mvc框架,web服务器用的是tomcat的,以下给 ...

  8. Windows服务定时执行任务

    1.创建多线程类 /// <summary> /// 多线程 /// </summary> public abstract class MuliThread<T> ...

  9. windows服务

    .net windows 服务创建.安装.卸载和调试   原文:http://www.cnblogs.com/hfliyi/archive/2012/08/12/2635290.html 我对例子做了 ...

随机推荐

  1. bzoj 1095 [ZJOI2007]Hide 捉迷藏(括号序列+线段树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1095 [题意] 给定一棵树,树上颜色或白或黑而且可以更改,多个询问求最远黑点之间的距离 ...

  2. 《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇01:道路的自动生成》

    1.道路的自动生成 道路自动生成概述: 3D跑酷游戏的核心就是跑,在跑这一过程中增加趣味性使得游戏具有更多的可玩性.道路的自动生成和自由拼接,为游戏增设了更多的不可预见性.这种不可预见性使得玩家在游戏 ...

  3. ubuntu免验证登陆权限问题

    由于经常ssh到服务器,每次输入密码很烦.就传了本机公钥到服务器. 和所有教程将的一样,做起来挺简单的. 本机ssh-keygen -t rsa生成公钥和密钥. 将公钥传至服务器,用户目录下.ssh/ ...

  4. Java网络编程(TCP服务端)

    /* * TCP服务端: * 1.创建服务端socket服务,并监听一个端口 * 2.服务端为了给客户端提供服务,获取客户端的内容,可以通过accept方法获取连接过来的客户端对象 * 3.可以通过获 ...

  5. Exercise: Rot13 Reader

    package main import ( "io" "os" "strings" "fmt" ) type rot13 ...

  6. [支付]银联支付(对jdk有要求,最好直接使用jdk7)

    数据打包发送到银联服务端,银联返回一个html页面,打开这个页面会自动跳转到银联的支付界面,支付完成后会有前台通知和后台通知,需要注意的是后台通知地址的ip必须是公网ip(广域网ip).这个时候需要配 ...

  7. RocketMQ常用命令

    转自:http://jameswxx.iteye.com/blog/2091971 1.1. 控制台使用 RocketMQ 提供有控制台及一系列控制台命令,用于管理员对主题,集群,broker 等信息 ...

  8. 使用jdbc连接上oracle的两种方法

    1. 使用thin连接 优点:thin驱动都是纯Java代码,并且使用TCP/IP技术通过java的Socket连接上Oracle数据库,所以thin驱动是与平台无关的,无需安装Oracle客户端,只 ...

  9. 安装Intel HAXM为Android 模拟器加速,30秒内启动完成

    要求 必备知识 windows 7 基本操作. 运行环境 windows 7(64位); Android Studio 1.1.0;JDK 1.7.0_75(64位);android-sdk_r24 ...

  10. spring mvc+ajax分页

    分页大致思路:页面每次把当前页传到后台并获得从后台传过来的json数据,解析后布局到这个页面上. 1.服务端代码: @Controller public class MemcachedContrlle ...