AVCNET自动服务程序C#

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

.NET自动服务程序—C#Postedon2006-09-1215:55舞步者阅读(223)评论(0)编辑收藏所属分类:C#.NET自动服务程序—C#应用程序开发中,常常需要实现这样一种功能:让服务器在每天的特定时刻运行固定的程序(或者实现固定的操作),比如让系统在每天的2:00备份数据库数据。要实现这样的功能,我们可以使用Windows服务(Windowsservice)。Windowsservice是一种系统自动的、无人值守的程序(仅存在于WindowsNT、2000和XP操作系统中),它能够在系统启动时开始运行。用户可以通过ServiceControlManager(SCM)Applet或者一些特殊的service-control应用来访问Windowsservice,使服务在没有用户登录到系统之前执行。在.NET出现以前,编写Windows服务是VC++、Delphi才能办到的事情,VB必须使用第三方控件才可以办到,而且编写起来特别的复杂。使用Microsoft®.NETFramework,我们可通过创建作为服务安装的应用程序来方便地创建Windows服务。设计:一个Windows服务程序,按照配置文件中的配置,在指定时刻运行指定程序。流程:启动服务à读取配置文件à启动定时器定时器定时触发(比如每隔30秒)à循环需要运行组件时间à时间到à运行指定程序编写:创建一个WindowsServiceASPectratio=t将Server1.cs更名为SchedulerServer.cs,双击SchedulerServer.cs打开设计页面,从工具栏的组件中拖Timer控件。更名为SchedulerTimer,并设置Enabled为flase。注意必须是Components里面的Timer控件,WindowsForms里面的Timer控件不行。F7浏览代码可以看到如下代码服务器启动的时候运行:///summary///Setthingsinmotionsoyourservicecandoitswork.////summaryprotectedoverridevoidOnStart(string[]args){//TODO:Addcodeheretostartyourservice.}服务停止的时候运行:///summary///Stopthisservice.////summaryprotectedoverridevoidOnStop(){//TODO:Addcodeheretoperformanytear-downnecessarytostopyourservice.}添加写日志函数,用来记录服务的日志:publicstaticvoidWriteLog(stringstrLog){stringstrPath;strPath=System.Environment.SystemDirectory;strPath+=@\SchedulerServer.txt;FileStreamfs=newFileStream(strPath,FileMode.OpenOrCreate,FileAccess.Write);StreamWriterm_streamWriter=newStreamWriter(fs);m_streamWriter.BaseStream.Seek(0,SeekOrigin.End);m_streamWriter.WriteLine(strLog);m_streamWriter.Flush();m_streamWriter.Close();fs.Close();}自动服务配置文件配置文件保存在系统目录,Windows2000为WinNT\System32,文件名为SchedulerServer.xml,存储了自动服务的所有配置信息,下面我们来看SchedulerServer.xml的格式:SchedulerServerAutoServerFilePathC:\AutoBackup.dll/FilePathRunTime2010-6-802:00/RunTimeTimeSpan?H/TimeSpan/AutoServerAutoServerFilePathD:\AutoMail.dll/FilePathRunTime03:00/RunTimeTimeSpan?D/TimeSpan註釋:TimeSpan執行頻率,?H小時,?D天,?W周,?M月/AutoServer/SchedulerServerFilePath设置需要运行的组件的路径RunTime设置需要运行的时间如果有多个程序需要运行,只需要添加AutoServer节点程序中添加读取配置文件函数:privateboolReadConf(){try{stringstrPath;XmlDocumentxmldoc=newXmlDocument();XmlNodeListxmlnd;strPath=System.Environment.SystemDirectory+@\SchedulerServer.xml;xmldoc.Load(strPath);xmlnd=xmldoc.SelectNodes(SchedulerServer/AutoServer);arrConf=newString[2,xmlnd.Count];for(inti=0;ixmlnd.Count;i++){arrConf[0,i]=xmlnd[i].SelectSingleNode(FilePath).InnerXml.Trim();arrConf[1,i]=xmlnd[i].SelectSingleNode(RunTime).InnerXml.Trim();arrConf[2,i]=xmlnd[i].SelectSingleNode(TimeSpan).InnerXml.Trim();}returntrue;}catch(Exceptione){WriteLog(DateTime.Now.ToString());WriteLog(ReadConfigurationError:);WriteLog(e.ToString());returnfalse;}}启动服务:定义两个变量:privatestring[,]arrConf;保存配置信息privateAssembly[]assObj;加载组件在OnStart事件中添加如下代码:protectedoverridevoidOnStart(string[]args){WriteLog(/************************************************************/);WriteLog(ScheculerServerStartat+DateTime.Now.ToString());//LoadConfiguationif(!ReadConf())return;//LoadAssemblytry{assObj=newAssembly[arrConf.GetLength(1)];for(inti=0;iassObj.Length;i++){assObj[i]=Assembly.LoadFrom(arrConf[0,i].ToString());arrConf[0,i]=NotRuning;}}catch(Exceptione){WriteLog(DateTime.Now.ToString());WriteLog(LoadDllError:);WriteLog(e.ToString());}//StartTimeSchedulerTimer.Interval=30000;//设置每30秒触发SchedulerTimer.Enabled=true;//启动定时器}定时器触发:此处完成检查时间是否运行privatevoidSchedulerTimer_Elapsed(objectsender,System.Timers.ElapsedEventArgse){try{//SchedulerTimer.Enabled=false;DateTimedtNow=DateTime.Now;DateTimedtRun;for(inti=0;iarrConf.GetLength(1);i++){dtRun=Convert.ToDateTime(arrConf[1,i].ToString());//修改執行時間if(dtRun.AddSeconds(-30)=dtNow&&dtNow=dtRun.AddSeconds(30)){if(arrConf[0,i].ToString().Trim()==NotRuning){foreach(TypetinassObj[i].GetTypes()){if(t.IsClass&&!t.IsAbstract&&t.IsPublic){Objectobj=Activator.CreateInstance(t);MethodInfomi=t.GetMethod(Run);if(mi!=null){mi.Invoke(obj,null);obj=null;GC.Collect();break;}obj=null;GC.Collect();}}arrConf[0,i]=OnRuning;WriteLog(-------------------------------------------------------------);WriteLog(DateTime.Now.ToString()+:Runing+arrConf[1,i]++assObj[i].Location.ToString());WriteLog(-------------------------------------------------------------);}}catch(Exceptionex){WriteLog(##########################################################);WriteLog(ex.ToString());WriteLog(##########################################################);}}这时程序的主骨架就完成了,下一步需要制作Windows服务安装程序,切换到设计页面,在属性的右下脚有AddInstaller字样,单击,VS.net自动帮你生成安装程序。ASPectratio=tv:ext=edit打开ProjectInstaller.cs文件,可以看到两个组件,设置其属性。运行帐号选择LocalSystem,系统以本地系统帐号运行。启动类型选择自动。编译为exe,打开VS.NETcmd,进入exe目录,运行InstallUtil.exeSchedulerServer.exe安装服务,成功之后,打开服务管理可以看到刚才的服务,启动服务即可。服务日志保存在系统目录下的SchedulerServer.txt/************************************************************/ScheculerServerStartat12/24/20033:46:21PM-------------------------------------------------------------12/24/20033:46:51PM:Runing15:47e:\work\geid\src\geidautocheck\bin\debug\geidautocheck.dll-------------------------------------------------------------ScheculerServerStopat12/24/20033

1 / 11
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功