您的位置:首页 > 编程语言 > C#

.NET自动服务程序—C#(一)

2008-04-24 16:23 543 查看
.NET自动服务程序—C#(一) 追风(VisualSW) 应用程序开发中,常常需要实现这样一种功能:让服务器在每天的特定时刻运行固定的程序(或者实现固定的操作),比如让系统在每天的2:00备份数据库数据。要实现这样的功能,我们可以使用Windows服务(Windows service)。Windows service是一种系统自动的、无人值守的程序(仅存在于Windows NT、2000和XP操作系统中),它能够在系统启动时开始运行。用户可以通过Service Control Manager (SCM) applet或者一些特殊的service-control应用来访问Windows service,使服务在没有用户登录到系统之前执行。 在.NET出现以前,编写Windows服务是VC++、Delphi才能办到的事情,VB必须使用第三方控件才可以办到,而且编写起来特别的复杂。使用Microsoft®.NET Framework,我们可通过创建作为服务安装的应用程序来方便地创建Windows服务。 设计:一个Windows服务程序,按照配置文件中的配置,在指定时刻运行指定程序。流程:启动服务à读取配置文件à启动定时器定时器定时触发(比如每隔30秒)à循环需要运行组件时间à时间到à运行指定程序编写:创建一个Windows Service将Server1.cs更名为SchedulerServer.cs,双击SchedulerServer.cs打开设计页面,从工具栏的组件中拖Timer控件。更名为SchedulerTimer,并设置Enabled为flase。注意必须是Components里面的Timer控件,Windows Forms里面的Timer控件不行。 F7浏览代码可以看到如下代码 服务器启动的时候运行:/// <summary>/// Set things in motion so your service can do its work./// </summary>protected override void OnStart(string[] args){ // TODO: Add code here to start your service.} 服务停止的时候运行:/// <summary>/// Stop this service./// </summary>protected override void OnStop(){ // TODO: Add code here to perform any tear-down necessary to stop your service.} 添加写日志函数,用来记录服务的日志:public static void WriteLog(string strLog) { string strPath; strPath=System.Environment.SystemDirectory; strPath+=@"SchedulerServer.txt"; FileStream fs = new FileStream(strPath,FileMode.OpenOrCreate,FileAccess.Write); StreamWriter m_streamWriter = new StreamWriter(fs); m_streamWriter.BaseStream.Seek(0, SeekOrigin.End); m_streamWriter.WriteLine(strLog); m_streamWriter.Flush(); m_streamWriter.Close(); fs.Close(); } 自动服务配置文件配置文件保存在系统目录,Windows 2000为WinNTSystem32,文件名为SchedulerServer.xml,存储了自动服务的所有配置信息,下面我们来看SchedulerServer.xml的格式:<SchedulerServer> <AutoServer> <FilePath>C:AutoBackup.dll</FilePath> <RunTime>02:00</RunTime> </AutoServer> <AutoServer> <FilePath>D:AutoMail.dll</FilePath> <RunTime>03:00</RunTime> </AutoServer></SchedulerServer> FilePath设置需要运行的组件的路径RunTime设置需要运行的时间如果有多个程序需要运行,只需要添加<AutoServer>节点 程序中添加读取配置文件函数:private bool ReadConf() { try { string strPath; XmlDocument xmldoc=new XmlDocument(); XmlNodeList xmlnd; strPath=System.Environment.SystemDirectory+@"SchedulerServer.xml"; xmldoc.Load(strPath); xmlnd=xmldoc.SelectNodes("SchedulerServer/AutoServer"); arrConf=new String[2,xmlnd.Count]; for(int i=0;i<xmlnd.Count;i++) { arrConf[0,i]=xmlnd[i].SelectSingleNode("FilePath").InnerXml.Trim(); arrConf[1,i]=xmlnd[i].SelectSingleNode("RunTime").InnerXml.Trim(); } return true; } catch(Exception e) { WriteLog(DateTime.Now.ToString()); WriteLog("Read Configuration Error:"); WriteLog(e.ToString()); return false; } }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: