C#调用Windows服务项目基础描述

开发 后端
这里介绍C#调用Windows服务项目,Windows服务是独立于登录用户而工作的Windows应用程序,它通常在计算机启动时开始执行,且常常连续执行,直到计算机关闭为止。

学习C#时,经常会遇到Windows服务问题,这里将介绍C#调用Windows服务项目来解决问题。

Windows服务是独立于登录用户而工作的Windows应用程序,它通常在计算机启动时开始执行,且常常连续执行,直到计算机关闭为止。像Exchange Server,IIS和杀毒软件等都使用这种方式,这样就可以独立于某一用户而且可以在任何用户登录前来运行,同时也可以服务于所有的进程,从而以一种服务的形式存在。

正因为Windows服务有着这么多的特性,因此,当需要一些特殊功能的时候就可以考虑C#调用Windows服务项目来解决问题。比如下面我们要做的这个例子。对于我们这些程序设计人员,计算机是在一起工作时间最长的伙伴,每天都会对着它的屏幕八个小时以上,还不包括下班后在家打游戏的时间,因此,保护眼睛是最重要的了。问题的起因来源于本人周六去眼科对激光手术的复查,大夫一再向我强调眼睛的自我调节能力,就是说只要你能保证你每隔一个小时左右就闭眼休息或向远处眺望,离开电脑屏幕,那么已经治好的近视就不会反弹。本人虽是自律性比较强的人,但在计算机屏幕面前就不再如此了,往往几个小时也不抬头一次,为了眼睛的健康,我决定把这个艰巨的任务交由计算机来完成,让它在一小时左右自动提醒我休息五分钟。如此一来,岂不是再也不用顾虑这件事了。

功能虽然简单,但要写个程序放在启动组里每天自动运行也不是一个好的办法,正巧以前也没做过Windows服务,不如索性来试一试,同进也看看.NET为我们提供了多么先进的功能吧,于是决定,就用C#来做一个提醒我保护眼睛的Windows服务,取名就叫CareEye吧。

运行Visual Studio.NET 2003,建立一个C#调用Windows服务项目,在CareEye.cs的设计视图提示可以把需要的控件和组件拖动到这上面,假如想要做系统日志的话当然就可以把EventLog组件拖过来了,不过这个程序好像不需要这些东西,还是算了吧。那么计时要不要采用计时器控件呢?想了一下,这个控件虽然好用,但太常用了,本着学习新知识的原则,最恰当的恐怕就是线程了,而且在以后做其他Windows服务的时候线程肯定是必需的,所以还是用线程好,这样我只要在线程中完成对时间的监测,把线程的启动和停止交给服务的启动和停止,呵,很方便啊。

再来看CareEye.cs的源程序,一大堆没见过的东西,不过仔细分析一下也就没什么了。CareEye类派生于ServiceBase类,因此继承了基本服务类的特性,显然Main()方法会由SCM(服务控制管理程序)调用,在这个方法中Run一个新的CareEye实例,这样就运行了一个Windows服务,OnStart()和OnStop()明显是用于启动和停止服务的响应函数了。

注意在Main()方法中有一个ServiceBase[]的数组,它是为那些一个服务进程包含多个服务准备的,对于这个程序来说,它只有一个 CareEye服务,因此完全可以把这个数组删除,而只是使用System.ServiceProcess.ServiceBase.Run(new CareEye());一句就够了。

接下来为了使用线程,需要引入System.Threading命名空间,为了使用对话框,还需要引入System.Windows.Forms命名空间,这是为了将来提示用户时显示对话框而准备的。

下面为类CareEye添加一个成员字段private Thread MainThread;同时在构造函数中对其进行初始化:

  1. MainThread=new Thread(new ThreadStart(ThreadFunc));  
  2. MainThread.Priority=ThreadPriority.Lowest; 
  3. %3
责任编辑:佚名 来源: 博客园
相关推荐

2009-08-07 16:43:44

C#调用Windows

2009-08-06 15:52:11

C#调用外部进程

2009-09-03 17:59:18

C#调用事件

2009-08-24 13:40:58

C# Windows

2009-07-31 16:12:10

Windows APIC#

2009-08-03 13:34:57

C#调用Windows

2009-08-17 13:18:01

C#调用Windows

2009-08-13 17:04:09

C#语言C#程序

2009-08-20 09:30:03

C#开发WinForm

2009-08-03 16:45:02

C#异步Socket

2009-08-17 16:32:34

C# Anonymou

2009-08-31 13:18:09

C# IWebMess

2009-08-03 18:08:39

C# ICloneab

2009-08-26 17:49:36

C# readonly

2009-08-31 18:32:01

C# ListBoxE

2009-08-18 17:41:22

C# ListView

2009-08-25 15:38:12

C# Windows服

2009-08-25 16:16:27

C#调用Windows

2009-08-19 10:09:21

C#和C++

2009-09-07 15:31:49

C#支持事件
点赞
收藏

51CTO技术栈公众号