系统服务的最简单实现

      记得去年搞系统服务的时候,看了不少园友门的文章:怎么新建系统服务,怎么通过vs2008添加安装类……总之,搞好久,才把这个搞定。

      下面我告诉你,只需三个文件,即可完成一个系统服务。

 

      1.新建一个类,命名为TestService,并继承于

System.ServiceProcess.ServiceBase。重启其中的OnStart方法和OnStop方法

      

 1 public class TestService:ServiceBase
 2     {
 3         protected override void OnStart(string[] args)
 4         {
 5             NLogHelper.Trace("OnStart");
 6         }
 7 
 8         protected override void OnStop()
 9         {
10             NLogHelper.Trace("OnStop");
11         }
12     }

 

     2.新建一个类,命名为TestServiceInstaller,并继承于System.Configuration.Install

     

 1     [RunInstaller(true)]
 2     public class TestServiceInstaller : Installer
 3     {
 4         /// <summary>
 5         /// 安装一个进程
 6         /// </summary>
 7         private ServiceInstaller serviceInstaller;
 8         /// <summary>
 9         /// 安装一个服务
10         /// </summary>
11         private ServiceProcessInstaller processInstaller;
12 
13         /// <summary>
14         /// Initializes a new instance of the <see cref="TestServiceInstaller"/> class.
15         /// </summary>
16         public TestServiceInstaller()
17         {
18             //致命用户类型
19             processInstaller = new ServiceProcessInstaller {Account = ServiceAccount.LocalSystem};
20             serviceInstaller = new ServiceInstaller
21                                    {
22                                        StartType = ServiceStartMode.Manual,//服务的启动类型:手动
23                                        ServiceName = "TestService",//服务的名称
24                                        Description = "这是TestService的描述",
25                                        DisplayName = "这里是显示在系统服务中的名称"
26                                    };
27 
28             Installers.Add(serviceInstaller);
29             Installers.Add(processInstaller);
30         }
31     }

 

      3.用一个控制台程序生成exe文件

     

 1     static class Program
 2     {
 3         /// <summary>
 4         /// 应用程序的主入口点。
 5         /// </summary>
 6         static void Main()
 7         {
 8             var servicesToRun = new ServiceBase[]
 9                                               {
10                                                   new TestService()
11                                               };
12             ServiceBase.Run(servicesToRun);
13         }
14     }

 

    接下来,编译,生成一个test.exe文件。

    然后通过vs的命令提示行,使用命令 installutil test.exe

 

嘿嘿,看一下,系统服务中已经多了一个名为:“这里是显示在系统服务中的名称”的服务了

明天再介绍些系统服务开发的其他知识

posted @ 2011-08-01 23:58  马非码  阅读(2503)  评论(11编辑  收藏  举报