×

C#教程(三十七)Windows服务

独孤求败 独孤求败 发表于2026-05-08 13:56:36 浏览29 评论0

抢沙发发表评论

什么是 Windows 服务?

Windows 服务(Windows Service)是一种在后台运行的程序,开机自启,不需要用户登录就能运行。

特别是使用Windows服务器在机房或托管时后台接收数据,非常方便。

常见例子:

Windows 更新服务

杀毒软件实时监控

数据库服务(MySQL、SQL Server)

IIS Web 服务

Windows服务 vs 桌面程序

图片

创建 Windows 服务项目(整点报时)

图片

项目名称:TimeReporterService

图片

创建完成

图片

切换到Service1.cs的代码视图

图片

完整代码:注意引用

























































using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Diagnostics;using System.Linq;using System.ServiceProcess;using System.Speech.Synthesis;using System.Text;using System.Threading.Tasks;using System.Timers;
namespace TimeReporterService{    public partial class Service1 : ServiceBase    {        public Service1()        {            InitializeComponent();        }        //定义一个计时器        private Timer _timer;        //服务启动        protected override void OnStart(string[] args)        {            // 每秒触发一次事件            _timer = new Timer(1000);            _timer.Elapsed += _timer_Elapsed;            _timer.Start();        }        //计时器事件处理        private void _timer_Elapsed(object sender, ElapsedEventArgs e)        {            // 整点报时(0分0秒)            if (DateTime.Now.Minute == 0 && DateTime.Now.Second == 0)            {                Speak($"现在是{DateTime.Now.Hour}点整");            }        }        //语音播报        private void Speak(string text)        {            try            {                SpeechSynthesizer synth = new SpeechSynthesizer(); synth.Speak(text);            }            catch { }        }        //服务停止        protected override void OnStop()        {            _timer?.Stop();            _timer?.Dispose();        }    }}

服务和Winform不同,没法启动运行,需要将其安装到服务里面才行。对服务进行安装设置。在Service1的设计视图上点击右键,添加安装程序

图片

会看到系统添加了如下内容

图片

点击serviceProcessInstaller1,修改属性

图片

点击serviceinstaller1,修改属性

图片

在项目上点击右键,生成

图片

生成后,再点击右键,选择【在文件资源管理器中打开文件夹】进入到bin\debug目录中,这个可执行的exe文件就是Windows服务。

图片

将服务安装到系统服务,方式有很多:

第一种安装卸载服务的方式

首先看看电脑中是否存在这个文件installutil.exe,可以搜索也可直接去看看,两个目录都有

C:\Windows\Microsoft.NET\Framework64\v4.0.30319

C:\Windows\Microsoft.NET\Framework64\v2.0.50727

建立两个文本文件:

安装服务.txt内容,添加完内容后修改扩展名为bat批处理文件

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\installutil.exe TimeReporterService.exe

pause

图片

卸载服务.txt内容,添加完内容后修改扩展名为bat批处理文件

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\installutil.exe /u TimeReporterService.exe

pause

图片

批处理文件

图片

在安装服务.bat右键

图片
看到如下内容即安装服务完毕。
图片

按win+r,输入services.msc打开系统服务,找到【整点报时服务】

图片

此时整点报时软件并没有启动,需要双击打开,点击【启动】

图片

启动后的状态

图片

在卸载服务.bat文件上右键【以管理员身份运行】即可卸载服务。

图片

第二种安装卸载服务的方式

按win+r进入运行窗口,输入cmd进入管理员窗口

输入命令创建服务

sc create TimeReporterService binPath= "E:\TimeReporterService\bin\Debug\TimeReporterService.exe" DisplayName= "整点报时服务"

图片

图片

:: 启动 sc start TimeReporterService

:: 停止 sc stop TimeReporterService

:: 删除 sc delete TimeReporterService

第三种安装卸载服务的方式

在本机调试程序时,为了方便我们一般采取上面两种方式,而要交付给客户就需要正式一些,需要建立安装程序。

首先打开扩展->管理扩展

图片

搜索install,安装扩展包,安装后需要重新启动VS。

图片

在解决方案右键,添加新建项目

图片

搜索setup,找到Setup Project

图片

创建

图片

网上有很多教程,大家搜索看一下,我这里简单的示例一下

在setup项目右键Add->项目输出

图片
图片
属性里也有很多需要设置的地方,我就不仔细说了。
图片

在Setup1项目上右键生成,即可生成安装文件,即可交付给客户进行setup安装,看着高大上O(∩_∩)O哈哈~

图片

服务的调试技巧

1.服务不能直接用F5进行调试,首先需要确认服务已经安装并运行了。

图片

2.VS菜单->调试->附加到进程

图片

附加进程

图片

在Timer的计时器事件里,加个中断即可看见,这样就可进行调试

图片

分享一下我写服务时的调试方法,我一般创建一个Winform程序先进行所有的代码调试,完成后再创建服务,把调试好的代码放进去。这样调试器起来非常方便。

总结

Windows 服务 = 后台运行、开机自启、无需登录

OnStart / OnStop 控制生命周期

ProjectInstaller 配置安装信息


群贤毕至

访客