系统服务的最简单实现

      记得去年搞系统服务的时候,看了不少园友门的文章:怎么新建系统服务,怎么通过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

 

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

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



如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!如果您想持续关注我的文章,请扫描二维码,关注马非码的微信公众号,我会将我的文章推送给您,并和您一起分享我日常阅读过的优质文章。

本文版权归作者和博客园共有,来源网址:http://www.cnblogs.com/marvin/欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
posted @   马非码  阅读(2503)  评论(11编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示