用.net创建windows service的总结 (转)

用.net创建windows service的总结 (转)[@more@]

前言

.NET为创建windows service提供了专门的类库,结束了以前开发windows service窘迫的局面。你甚至可以不用添加一行代码,就可以用wizard生成一个windows service。

一、用wizard生成最基本的框架

此时,系统会为你生成一个框架,部分主要源代码如下:

using System;XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Diagnostics;

using System.ServiceProcess;

namespace WindowsService1

{

  public class Service1 : System.ServiceProcess.ServiceBase

  {

 

  private System.ComponentModel.Container components = null;

 

  public Service1()

  {

  InitializeComponent();

  }

  static void Main()

  {

  System.ServiceProcess.ServiceBase[] ServicesToRun;

  ServicesToRun = new System.ServiceProcess.ServiceBase[] { new Service1() };

  System.ServiceProcess.ServiceBase.Run(ServicesToRun);

    }

  private void InitializeComponent()

  {

  components = new System.ComponentModel.Container();

  this.ServiceName = "Service1";

  }

  protected override void Dispose( bool disposing )

  {

  if( disposing )

  {

  if (components != null)

  {

    components.Dispose();

  }

  }

  base.Dispose( disposing );

  }

  protected override void OnStart(string[] args)

  {

 

  }

  protected override void OnStop()

  {

 

  }

  }

}

有必要将其结构讲解一下。其中,System.ServiceProcess就是关键所在,是引入windows service的地方。其中的OnStart()、OnStop()两个函数能够被windows服务管理器或者MMC调用,进行服务的启动、停止。

二、构建一个服务

该框架提供了一个空的服务,什么也不能做。所以我们要给它添加代码。比如,我想

做一个能够扫描数据库的服务,要求每次扫描完之后间隔一秒钟,然后继续扫描。

根据上面的要求,初步设想需要一个timer类,查命名空间,发现有二个不同的timer类,他们是:

1、  System.Windows.Forms.Timer

2、  System.Timers.Timer

还有一个System.Threading,带有sleep方法

究竟该用哪个呢?

细查MSDN,会找到只有2适合,对于1来说,timer控制时间不够精确,对于线程来说,实现比较困难。

三、规划一下流程

基于该服务的要求,确定服务的流程如下:

为此,我们定义两个函数:_Scan(bool _judge)、_DO_Something()

然后引入System.Timers命名空间,并且定义一个_timer对象,这些代码如下:

1、using System.Timers;  //引入System.Timers 

2、public System.Timers.Timer _timer;  //定义对象_timer   

3、public bool _Scan(bool _judge) 

  { 

  //TODO 

  } 

4、public void _DO_Something()   

  { 

  //TODO 

  }   

然后在InitializeComponent()里边把_timer的Elapsed事件添加上,代码如下:

this._timer.Elapsed += new System.Timers.ElapsedEventHandler(this._timer_Elapsed);

  定义_timer_Elapsed事件,代码如下:

private void _timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 

  { 

  _timer.Interval=1000; 

    _timer.Enabled=false; 

  if(_Scan()==true)   

  { 

  _DO_Something(); 

  }   

  _timer.Enabled=true; 

    } 

  最后,我们不要忘记添加windows service的installer,也是一个wizard,基本上不需要添加一行代码。然后编译,生成一个可执行文件。注意:因为这不是普通的可执行文件,所以不能通过双击实现运行,只能通过installutil YourServiceName、NET START YourServiceName、NET STOP YourServiceName、installutil/u YourServiceName来进行该服务的安装、启动、停止、暂停(可选)、卸载。最好是做成批处理文件,一劳永逸。^_^

  tojike

 

 


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10748419/viewspace-998332/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10748419/viewspace-998332/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值