C#创建Service模板

开发 后端
这里介绍C#创建Service模板,看看如何实现一个最基本的windows Service,以及如何来调试windows Service模板。

现在的.NET框架已经为Windows Service的开发提供足够强大的支持,你只需要关注Service所要实现的逻辑,而完全不用关心Service底层是如何实现的,相比以前用MFC 来说,真是质的飞跃啊。闲话少谈,看看如何实现一个最基本的windows Service,以及如何来调试windows Service模板.

打开VS 2005,点击File->New->Project…,在C#创建工程向导中选择Windows Service模板。

在工程名输入框中,输入TestService然后点击OK.VS为我们生成了最基本的代码,我们将Service的名称改为我们期望的名称,在 solution explorer中右键点击vs自动生成的Service文件“Service1.cs”,在弹出的菜单中选择Rename,输入 “MyFirstService”,然后切换到设计视图,也就是在solution explorer中双击MyfirstService.cs,在Property Explorer中将ServiceName属性改为MyFirstService,这时一个可运行的windows Service已经C#创建成功。我们添加一些代码来测试一下这个Service,最简单的测试方式就是向windows event log里来添加一些消息以显示我们的Service的状态。

我们需要一个EventLog组件向windows log中添加信息,在solution explorer中双击MyfirstSerivce文件切换到设计视图,将工具箱中的EventLog组件拖到设计视图中,我们保留EventLog组件的默认名称eventLog1.选中eventLog1,在property explorer中将Log属性选为Application,在Source属性中输入“MyFirstService”。接下来,我们在设计视图的空白处,右键点击,并选择View Code切换到代码视图,在OnStart和OnStop方法里输入代码实现日志写入,代码如下:

要运行这个Service我们还要做下边的几个步骤:

1.为我们的Service添加Installer,右键点击设计视图,选择Add Installer,VS将会为我们添加ProjectInstaller.cs,并在ProjectInstaller中添加组件 ServiceInstaller1和ServiceProcessInstaller1,现在我们来修改他们的属性来控制Service的安装和启动选项。在ProjectInstaller得设计视图中选中ServiceProcessInstaller1,将它得Account属性选为 LocalSystem,这样以这个帐号服务启动。如果你希望系统启动时自动启动服务得话,将ServiceInstaller1的StartType的属性选为Automatic,如果手动启动的话,选为manaul.

2.安装Service,我们要用到IntallUtil.exe这个程序,这个程序位于C:\WINDOWS\Microsoft.NET \Framework\v2.0.50727.点击开始菜单,选择“运行”,在运行对话框中输入cmd,进入到命令行窗口,输入cd :\WINDOWS\Microsoft.NET\Framework\v2.0.50727,进入到这个目录,然后输入installutil F:\Programs\C#\TestService\TestService\bin\Debug\testserveice.exe, installutil后边的内容就是我们的工程生成的可执行程序的路径,情根据需要修改。

如果你给ServiceInstaller1的StartType设为Automatic的话,安装完服务,服务已经运行起来了,如果 StartType是Manual的话,你需要手动启动。现在我们进入“服务”,要打开“服务”,请单击“开始”,指向“设置”,然后单击“控制面板”。依次单击“性能和维护”、“管理工具”,然后双击“服务”。在里边你应该能够看到我们制作的Service MyFirstService.在这里边,我们可以启动,关闭服务,还可以设置服务的启动类型。然后,我们看看服务有没有正确的写入日志,我们需要进入到事件查看器,要打开“事件查看器”,请单击“开始”,指向“设置”,然后单击“控制面板”。单击“性能和维护”,单击“管理工具”,然后双击“事件查看器 ”。

如果你不需要这个Service了,仍然使用InstallUtil这个程序来卸载,不过在InstallUtil后跟参数 –u,比如installutil –u F:\Programs\C#\TestService\TestService\bin\Debug\testserveice.exe.

Service的调试方法与普通的程序调试方法是不一样的。我来介绍一下。

1. Build你的项目

2. 设置断点,因为我们的Service非常的简单,没有什么执行逻辑,所以设置断点没有任何意义,大家可以自己写一些代码来实践。一般来说,我们服务里需要用到一个另外的线程来执行任务,你需要在线程的执行代码中来设置断点。

3. 安装Service,我们前边有介绍如何安装。

4. 如果你的Service启动类型是手动(Manual),你需要到“服务”里启动你的Service.一般来说,如果你的Service在开发阶段,我推荐你将Service的启动类型设置为Manual,这样便于调试,因为如果Service在运行过程中,你将无法build工程。

5. 在VS中,从菜单中选择Debug->Attach Process…。

如果你找不到自己的Service,请选中Show processes from all users.在Available processes列表中选中我们的Service所在的进程TestService,然后点击Attach按钮,如果你设置的断点合理的话,那么,程序就会停在断点处,接下来你就可以进行调试了。

  1. usingSystem;  
  2. usingSystem.Collections.Generic;  
  3. usingSystem.ComponentModel;  
  4. usingSystem.Data;  
  5. usingSystem.Diagnostics;  
  6. usingSystem.ServiceProcess;  
  7. usingSystem.Text;  
  8.  
  9. namespaceTestService  
  10. {  
  11. publicpartialclassMyFirstService:ServiceBase  
  12. {  
  13. publicMyFirstService()  
  14. {  
  15. InitializeComponent();  
  16. }  
  17.  
  18. protectedoverridevoidOnStart(string[]args)  
  19. {  
  20. //TODO:Addcodeheretostartyourservice.  
  21. eventLog1.WriteEntry("Servicestart");  
  22. }  
  23.  
  24. protectedoverridevoidOnStop()  
  25. {  
  26. //TODO:Addcodeheretoperformanytear-downnecessaryto  
  27. stopyourservice.  
  28. eventLog1.WriteEntry("Servicestop");  
  29. }  
  30. }  

以上介绍C#创建Service模板

【编辑推荐】

  1. 介绍Mono C#编译器
  2. C#运算符重载学习总结
  3. 概述C#语言的结构体
  4. C#遗传算法学习笔记
  5. 讨论C#分部方法
责任编辑:佚名 来源: 51CTO.com
相关推荐

2009-08-11 13:27:22

C#创建Web Ser

2009-08-20 15:38:50

C#建立Web Ser

2009-08-11 11:07:49

Java调用C# we

2009-08-24 17:24:28

C#创建XML文档

2009-08-06 16:44:03

C#创建WebServ

2009-08-10 13:40:46

创建C# COM对象

2009-09-03 09:40:57

C#创建表单

2009-08-11 14:16:00

Winform调用WEC#

2009-08-24 17:46:54

C#创建XML文档

2009-08-28 16:29:02

C#类库工程

2009-08-27 17:31:44

C#创建Windows

2009-09-01 13:51:51

C#创建Word文档

2009-09-02 17:16:01

冒泡排序

2009-09-01 14:39:47

C#创建Excel文件

2009-09-01 11:07:58

C#项目

2009-08-10 13:34:11

创建C# COM对象

2009-08-25 17:24:55

C#串口通信程序

2009-08-14 11:00:16

C#创建Windows

2009-08-25 17:28:23

C#创建DataSet

2009-08-11 13:07:26

C#类库中添加Web
点赞
收藏

51CTO技术栈公众号