系统服务的最简单实现
记得去年搞系统服务的时候,看了不少园友门的文章:怎么新建系统服务,怎么通过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 {
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 }
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 }
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/欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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代理技术深度解析与实战指南