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

.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 浏览代码可以看到如下代码

服务器启动的时候运行:

///

1<summary>
2
3///  Set things in motion so your service can do its work. 
4
5///  </summary>

protected override void OnStart( string [] args)

{

// TODO: Add code here to start your service.

}

服务停止的时候运行:

///

1<summary>
2
3///  Stop this service. 
4
5///  </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 为 WinNT\System32 ,文件名为 SchedulerServer.xml ,存储了自动服务的所有配置信息,下面我们来看 SchedulerServer.xml 的格式:

< SchedulerServer >

< AutoServer >

< FilePath > C:\AutoBackup.dll < RunTime > 02:00 < AutoServer >

< FilePath > D:\AutoMail.dll < RunTime > 03:00 FilePath 设置需要运行的组件的路径

RunTime 设置需要运行的时间

如果有多个程序需要运行,只需要添加

 1<autoserver> 节点 
 2
 3程序中添加读取配置文件函数: 
 4
 5private  bool  ReadConf() 
 6
 7{ 
 8
 9try 
10
11{ 
12
13string  strPath; 
14
15XmlDocument xmldoc=  new  XmlDocument(); 
16
17XmlNodeList xmlnd; 
18
19strPath=System.Environment.SystemDirectory+@"\SchedulerServer.xml"; 
20
21xmldoc.Load(strPath); 
22
23xmlnd=xmldoc.SelectNodes("SchedulerServer/AutoServer"); 
24
25arrConf=  new  String[2,xmlnd.Count]; 
26
27for  (  int  i=0;i&lt;xmlnd.Count;i++) 
28
29{ 
30
31arrConf[0,i]=xmlnd[i].SelectSingleNode("FilePath").InnerXml.Trim(); 
32
33arrConf[1,i]=xmlnd[i].SelectSingleNode("RunTime").InnerXml.Trim(); 
34
35} 
36
37return  true  ; 
38
39} 
40
41catch  (Exception e) 
42
43{ 
44
45WriteLog(DateTime.Now.ToString()); 
46
47WriteLog("Read Configuration Error:"); 
48
49WriteLog(e.ToString()); 
50
51return  false  ; 
52
53} 
54
55}</autoserver>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus