什么是 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 配置安装信息