系列一: 制作一个可安装、可启动、可停止、可卸载的Windows service(downmoon原创)

  系列二:演示一个定期执行的windows服务及调试(windows service)(downmoon)

  系列三: windows service系列三--制作可控制界面的windows service

  一、经常有人问起如何让程序定期自动执行
  除了像系统任务和SQL JOB/DTS等都可以满足不同的用户需求外,这里演示了如何做一个简单的windows serivce的框架。主要的功能是按照预先设定的时间间隔来执行类似的操作,比如抓取网页,抓取天气预报,群发邮件等。

  假定用户有如下代码需要定期自动执行:

  1.  1 #region 获取内容
  2.  2        /// <summary>
  3.  3        /// 获取内容,by tony 2009.9,16 
  4.  4        /// 邀月(downmoon):3w@live.cn
  5.  5        /// </summary> 
  6.  6        public void GetContentByMethods(bool isDelteOldFile)
  7.  7        {
  8.  8            System.Text.StringBuilder builder = new System.Text.StringBuilder();
  9.  9
  10. 10            try
  11. 11            {
  12. 12                #region DeleteOldFile
  13. 13                if (isDelteOldFile)
  14. 14                {
  15. 15                    string path = Globals.BakPath;
  16. 16                    if (System.IO.Directory.Exists(path))
  17. 17                    {
  18. 18                        string[] strFiles = System.IO.Directory.GetFiles(path);
  19. 19                        foreach (string strFile in strFiles)
  20. 20                        {
  21. 21                            System.IO.File.Delete(strFile);
  22. 22                        }
  23. 23                    }
  24. 24                }
  25. 25                #endregion
  26. 26                #region My Methods
  27. 27                int tempCount = 0;
  28. 28                string temp = "Operation_{0} was  sucessfully executed at {1} by Operator_{2}!";
  29. 29                string temp2 = string.Empty;
  30. 30                string filename = Globals.CreateXMLDir(Globals.BakPath) + Globals.StrTempDate + ".txt";
  31. 31                for (int k = 0; k < Globals.TopCount; k++)
  32. 32                {
  33. 33                    temp2 = string.Empty;
  34. 34                    //此处从数据表中读取数据,做一些事情,比如发邮件,抓取网页内容等。
  35. 35                    temp2 = string.Format(temp, k, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), k) + "\r\n";
  36. 36                    builder.Append(temp2);
  37. 37                    tempCount++;
  38. 38                }
  39. 39                builder.Append("total [" + tempCount + "] records was executed this time!");
  40. 40                SaveFileResult(filename, builder.ToString());
  41. 41                #endregion
  42. 42            }
  43. 43            catch (Exception ex) { string s = ex.Message; }
  44. 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)的更多相关文章

  1. 一步步实现windows版ijkplayer系列文章之六——SDL2源码分析之OpenGL ES在windows上的渲染过程

    一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...

  2. 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(中)

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 四.创建一个Blazor应用程序 1. 第一种创 ...

  3. 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(下)

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...

  4. 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(完)

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...

  5. 服务注册中心之ZooKeeper系列(二) 实现一个简单微服务之间调用的例子

    上一篇文章简单介绍了ZooKeeper,讲了分布式中,每个微服务都会部署到多台服务器上,那服务之间的调用是怎么样的呢?如图: 1.集群A中的服务调用者如何发现集群B中的服务提供者呢? 2.集群A中的服 ...

  6. Creating Dialogbased Windows Application (2) / 创建基于对话框的Windows应用程序(二)Button的应用、新建子窗体 / VC++, Windows

    创建基于对话框的Windows应用程序(二) —— Button的应用.新建子窗体 可以发现上一节创建的窗体中,点击OK和Cancel两个按钮是没有任何反应的.现在我们来为他们添加退出对话框的功能. ...

  7. go微服务系列(二) - 服务注册/服务发现

    目录 1. 服务注册 1.1 代码演示 1.2 在go run的时候传入服务注册的参数 2. 服务发现均衡负载 2.1 均衡负载算法 2.2 服务发现均衡负载的演示 1. 服务注册 1.1 代码演示 ...

  8. 【SpringCloud构建微服务系列】使用Spring Cloud Config统一管理服务配置

    一.为什么要统一管理微服务配置 对于传统的单体应用而言,常使用配置文件来管理所有配置,比如SpringBoot的application.yml文件,但是在微服务架构中全部手动修改的话很麻烦而且不易维护 ...

  9. 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(上)

    学习ASP.NET Core Blazor编程系列一--综述 一.概述 Blazor 是一个生成交互式客户端 Web UI 的框架: 使用 C# 代替 JavaScript 来创建信息丰富的交互式 U ...

随机推荐

  1. sqlserver 四舍五入(转)

    select   cast(round(12.5,2)   as   numeric(5,2)) 解释: round()函数,是四舍五入用,第一个参数是我们要被操作的数据,第二个参数是设置我们四舍五入 ...

  2. 面向对象分析方法(I)

    找出最关键的一些业务场景:一般通过动词来寻找,比如招聘系统中,一个应聘人投递一个职位就是一次应聘,应聘就是一个业务场景:一个学生参加某门课的考试,那么考试就是一个业务场景:一个学生去图书馆借书,那么借 ...

  3. linux chmod命令(转)

    chmod命令用于改变linux系统文件或目录的访问权限.用它控制文件或目录的访问权限.该命令有两种用法.一种是包含字母和操作符表达式的文字设定法:另一种是包含数字的数字设定法. Linux系统中的每 ...

  4. 4、JavaScript进阶篇①——基础语法

    一.认识JS 你知道吗,Web前端开发师需要掌握什么技术?也许你已经了解HTML标记(也称为结构),知道了CSS样式(也称为表示),会使用HTML+CSS创建一个漂亮的页面,但这还不够,它只是静态页面 ...

  5. nssstring 转换大小写

    //7.将字符串中的字母转换成大写 NSString * str10 = @"china"; NSString * tmpStr1 = [str10 uppercaseString ...

  6. Java jaxp查询节点

    <?xml version="1.0" encoding="UTF-8"?> <person> <p1> <name& ...

  7. html 二级联动(省市联动)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. php:mysqli扩展

    mysqli功能概述:http://php.net/manual/zh/mysqli.summary.php 代码(基本的用法):貌似可以防止sql注入 $root = "root" ...

  9. 删除NSMutableArray中的二维数组

    // 删除模型数据 [self.mutableArr[indexPath.section] removeObjectAtIndex:indexPath.row]; //删除UI(刷新数据,UI) [s ...

  10. Leetcode: Lexicographical Numbers

    Given an integer n, return 1 - n in lexicographical order. For example, given 13, return: [1,10,11,1 ...