C#制作Windows service服务系列二:演示一个定期执行的windows服务及调试(windows service)
系列一: 制作一个可安装、可启动、可停止、可卸载的Windows service(downmoon原创)
系列二:演示一个定期执行的windows服务及调试(windows service)(downmoon)
系列三: windows service系列三--制作可控制界面的windows service
一、经常有人问起如何让程序定期自动执行?
除了像系统任务和SQL JOB/DTS等都可以满足不同的用户需求外,这里演示了如何做一个简单的windows serivce的框架。主要的功能是按照预先设定的时间间隔来执行类似的操作,比如抓取网页,抓取天气预报,群发邮件等。
假定用户有如下代码需要定期自动执行:
1 #region 获取内容
2 /// <summary>
3 /// 获取内容,by tony 2009.9,16
4 /// 邀月(downmoon):3w@live.cn
5 /// </summary>
6 public void GetContentByMethods(bool isDelteOldFile)
7 {
8 System.Text.StringBuilder builder = new System.Text.StringBuilder();
9
10 try
11 {
12 #region DeleteOldFile
13 if (isDelteOldFile)
14 {
15 string path = Globals.BakPath;
16 if (System.IO.Directory.Exists(path))
17 {
18 string[] strFiles = System.IO.Directory.GetFiles(path);
19 foreach (string strFile in strFiles)
20 {
21 System.IO.File.Delete(strFile);
22 }
23 }
24 }
25 #endregion
26 #region My Methods
27 int tempCount = 0;
28 string temp = "Operation_{0} was sucessfully executed at {1} by Operator_{2}!";
29 string temp2 = string.Empty;
30 string filename = Globals.CreateXMLDir(Globals.BakPath) + Globals.StrTempDate + ".txt";
31 for (int k = 0; k < Globals.TopCount; k++)
32 {
33 temp2 = string.Empty;
34 //此处从数据表中读取数据,做一些事情,比如发邮件,抓取网页内容等。
35 temp2 = string.Format(temp, k, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), k) + "\r\n";
36 builder.Append(temp2);
37 tempCount++;
38 }
39 builder.Append("total [" + tempCount + "] records was executed this time!");
40 SaveFileResult(filename, builder.ToString());
41 #endregion
42 }
43 catch (Exception ex) { string s = ex.Message; }
44 }
那么,只需要将以上代码放在windows service环境下,部署成windows service,即可定期执行
详细过程我就省略了! 看文后源码
说明:
1、SetupServer.bat ,双击可安装服务
2、unInstallServer.bat,双击可卸载服务
3、主要文件WSDemoByTime.exe
4、配置文件WSDemoByTime.exe.config(主要配置数量、间隔时间、数据连接等)
运行效果,这里只演示了生成一个基本的记录文件。见图;


二、如何调试windows服务(windows service)。
这里提供简单的处理过程:
假定,我们已经部署好了windows service,结果发现不能如我们想像的运行,除了像本系列所描述的记录日志外,还可以直接调试进程。
具体步骤见下图:
一、调试--附加到进程

二、设置断点,调试

三、如何修改windows service配置并生效?
请注意,windows service的配置文件一般形如XXX.exe.Config,在本文中是WSDemoByTime.exe.Config,这个配置文件必须与WSDemoByTime.exe文件一致,并且修改配置文件后,需要重新启动windows serice才能使配置生效。

最后,附上源码,转载请注明出处,邀月 3w@live.cn 谢谢!
C#制作Windows service服务系列二:演示一个定期执行的windows服务及调试(windows service)的更多相关文章
- 一步步实现windows版ijkplayer系列文章之六——SDL2源码分析之OpenGL ES在windows上的渲染过程
一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...
- 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(中)
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 四.创建一个Blazor应用程序 1. 第一种创 ...
- 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(下)
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
- 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(完)
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
- 服务注册中心之ZooKeeper系列(二) 实现一个简单微服务之间调用的例子
上一篇文章简单介绍了ZooKeeper,讲了分布式中,每个微服务都会部署到多台服务器上,那服务之间的调用是怎么样的呢?如图: 1.集群A中的服务调用者如何发现集群B中的服务提供者呢? 2.集群A中的服 ...
- Creating Dialogbased Windows Application (2) / 创建基于对话框的Windows应用程序(二)Button的应用、新建子窗体 / VC++, Windows
创建基于对话框的Windows应用程序(二) —— Button的应用.新建子窗体 可以发现上一节创建的窗体中,点击OK和Cancel两个按钮是没有任何反应的.现在我们来为他们添加退出对话框的功能. ...
- go微服务系列(二) - 服务注册/服务发现
目录 1. 服务注册 1.1 代码演示 1.2 在go run的时候传入服务注册的参数 2. 服务发现均衡负载 2.1 均衡负载算法 2.2 服务发现均衡负载的演示 1. 服务注册 1.1 代码演示 ...
- 【SpringCloud构建微服务系列】使用Spring Cloud Config统一管理服务配置
一.为什么要统一管理微服务配置 对于传统的单体应用而言,常使用配置文件来管理所有配置,比如SpringBoot的application.yml文件,但是在微服务架构中全部手动修改的话很麻烦而且不易维护 ...
- 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(上)
学习ASP.NET Core Blazor编程系列一--综述 一.概述 Blazor 是一个生成交互式客户端 Web UI 的框架: 使用 C# 代替 JavaScript 来创建信息丰富的交互式 U ...
随机推荐
- 不允许修改SQLserver2008r2表中字段的属性问题
SQLserver2008r2修改表中字段的属性时弹出 点击工具->选项,取消阻止保存要求重新创建表的更改
- python or not python
python or not python 我挺喜欢 python 这种编程语言,它本身的丰富的动态特性让这种语言的表达能力很强,基本上 python 上写的一行代码,可实现 java 上 1.5 到 ...
- AngularJs赋值问题
$scope.showUpgradeForm = function(item){ $scope.upgrade = item; $scope.upgrade.vercode++; // 其它操作 } ...
- markdown语法集锦
参考:http://wowubuntu.com/markdown/#blockquote 1. 标题 # 一级标题 ## 二级标题 ### 三级标题 共六级标题 2. 列表 有序列表:1,2,3: 无 ...
- javascript实例学习之二——类新浪微博的输入框
该案例实现如下效果,具体可见新浪微博网站的微博发布框 实现 以下效果效果1:当光标移入文本框时,文本框上方的文字发生变化,显示剩余可以输入的字数,当光标移出文本框,并且文本框中没有任何输入时,恢复最初 ...
- jquery文字溢出处理,超出变省略号
//文字溢出 $(function(){ $(".d_dt a").each(function(){ var maxwidth =100; if($(this).text().le ...
- Oracle修改时间报:ORA-01830: 日期格式图片在转换整个输入字符串之前结束的解决办法
1.错误原因: date类型不能包含秒以后的精度. 如日期:2010-01-01 20:02:20.0 解决方法:将日期秒以后的精度去除, to_date(substr(INVOICE_DATE,1, ...
- Java Axis2 1.6.3+JDK1.7.0_13+Tomcat7.0.65+eclipse搭建web service
安装文件下载: jdk1.7.0_13 安装步骤参考文章:http://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html tomcat7. ...
- (Builder)创建者模式
定义: 建造模式:将一个复杂对象的构建与他的表示相分离,使得同样的构建过程可以创建不同的表示. 适用性: 当流程算法可以固定几个步骤,步骤的算法步骤执行顺序固定,且制造的产品可以唯一确定,这时使用创建 ...
- HTML部分标签和代码
1.1.1 一般标签.格式控制标签 所谓HTML就是 Hyper Text Markup Language(超无文本标记语言) <html> 开始标签 <head> 网页上 ...