⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 用.net创建windows service的总结.txt

📁 学习(编程技巧_编程知识_程序代码),是学习编程不可多得的学习精验
💻 TXT
字号:
用.net创建windows service的总结
 

--------------------------------------------------------------------------------
 
tojike 时间:2003-7-31 11:16:15 
   
前言

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

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


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

using System;<o:p>

using System.Collections;<o:p>

using System.ComponentModel;<o:p>

using System.Data;<o:p>

using System.Diagnostics;<o:p>

using System.ServiceProcess;<o:p>

namespace WindowsService1<o:p>

{<o:p>

public class Service1 : System.ServiceProcess.ServiceBase<o:p>

{<o:p>

<o:p>

private System.ComponentModel.Container components = null;<o:p>

<o:p>

public Service1()<o:p>

{<o:p>

InitializeComponent();<o:p>

}<o:p>

static void Main()<o:p>

{<o:p>

System.ServiceProcess.ServiceBase[] ServicesToRun;<o:p>

ServicesToRun = new System.ServiceProcess.ServiceBase[] { new Service1() };<o:p>

System.ServiceProcess.ServiceBase.Run(ServicesToRun);<o:p>

}<o:p>

private void InitializeComponent()<o:p>

{<o:p>

components = new System.ComponentModel.Container();<o:p>

this.ServiceName = "Service1";<o:p>

}<o:p>

protected override void Dispose( bool disposing )<o:p>

{<o:p>

if( disposing )<o:p>

{<o:p>

if (components != null) <o:p>

{<o:p>

components.Dispose();<o:p>

}<o:p>

}<o:p>

base.Dispose( disposing );<o:p>

}<o:p>

protected override void OnStart(string[] args)<o:p>

{<o:p>

<o:p>

}<o:p>

protected override void OnStop()<o:p>

{<o:p>

<o:p>

}<o:p>

}<o:p>

}<o:p>

<o:p> 

有必要将其结构讲解一下。其中,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 <o:p>

2、public System.Timers.Timer _timer; //定义对象_timer <o:p>

3、public bool _Scan(bool _judge) <o:p>

{ <o:p>

//TODO <o:p>

} <o:p>

4、public void _DO_Something() <o:p>

{ <o:p>

//TODO <o:p>

} <o:p>

<o:p> 

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

this._timer.Elapsed += new System.Timers.ElapsedEventHandler(this._timer_Elapsed);<o:p>

定义_timer_Elapsed事件,代码如下:<o:p>

private void _timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) <o:p>

{ <o:p>

_timer.Interval=1000; <o:p>

_timer.Enabled=false; <o:p>

if(_Scan()==true) <o:p>

{ <o:p>

_DO_Something(); <o:p>

} <o:p>

_timer.Enabled=true; <o:p>

} <o:p>

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

tojike

 
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -