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

原文:http://blog.csdn.net/downmoon/article/details/4557991

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

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

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

 

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

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

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

  那么,只需要将以上代码放在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才能使配置生效。
  

  最后,附上源码, 转载请注明出处,邀月 [email protected] 谢谢!

  源码下载



助人等于自助!   [email protected]

你可能感兴趣的:(exception,windows,String,C#,service,Path)