C# 中的 Windows 服务介绍
Windows 服务是 .NET 生态系统中的强大工具,能够在没有用户干预的情况下执行后台任务。 用 C# 创建 Windows 服务听起来可能很复杂,但是在他的视频"Intro to Windows Services in C# - How to create, install, and use a service using Topshelf"中,Tim Corey 将一步一步地进行分解。
在本文中,我们将介绍该视频,涵盖每个主题,以提供清晰度和连续性。
Windows 服务简介
Tim 介绍了 Windows 服务,它们是强大的、经常被忽视的自动化工具。 这些应用程序旨在后台运行,无需用户界面即可处理任务。 常见的例子包括 SQL Server Agent 或 Hyper-V 服务。
Tim 强调了实践对于掌握 C# 的重要性。 他建议下载视频描述中链接的源代码进行实践学习。
创建控制台演示应用程序
Tim 使用 Visual Studio 创建了一个名为 SimpleHeartbeatService 的新控制台应用程序项目。虽然可以使用 Windows 服务项目模板,但 Tim 更倾向于使用控制台方法来简化调试。
Tim指出:"这里的理念不是我在这里输入了什么代码,而是如何创建服务本身。
什么是 Windows 服务?
Tim 在 Windows 中使用开始菜单搜索打开 "服务 "选项卡(只需键入 "服务 "并按 Enter 即可)。 他解释说,后台运行的服务执行着操作系统的重要功能,如远程桌面或 MySQL 服务器。
目标是使用自定义代码在此列表中创建一个新条目。
Visual Studio 项目类型:控制台应用程序与 Windows 服务
您可能会倾向于选择 Visual Studio 中的 Windows 服务项目,但 Tim 解释说它更难调试。 控制台应用程序可以让您在本地运行和测试,从而减少将调试器连接到实时服务的需要。
"内置服务类型项目增加了调试难度,因为您必须先安装它,然后再附加调试器"。
通过 NuGet 添加 Topshelf.
为了简化服务的实现,Tim 通过 NuGet 添加了开源框架 Topshelf。 该流行库(拥有数百万下载量)可帮助创建 Windows 服务,而无需模板代码。
翻译步骤
1.右键单击参考文献
2.选择管理 NuGet 软件包
3.搜索并安装 Topshelf
编写服务逻辑
Tim 创建了一个有两个公共方法的 Heartbeat 类:Start() 和 Stop()。 在构造函数中,他设置了一个 System.Timers.Timer 每秒执行一次。
该计时器的 Elapsed 事件会将当前时间附加到 C# 文件夹中的 .txt 文件。 这将模拟一个持续运行的后台任务。
"该计时器将每秒写入一个文本文件,显示服务还活着"。
这将模拟实际服务中长期运行进程的工作方式,如文件夹扫描或打印文件。
使用 Topshelf 提供布线服务
Tim 使用 HostFactory.Run 将 Topshelf 集成到应用程序中:
定义心跳类
映射 Start() 和 Stop() 方法
- 配置服务以 LocalSystem 的身份运行,并授予必要的权限
他还要为服务设置元数据:
服务名称:HeartbeatService
显示名称:心跳服务
- 说明:用于 YouTube 视频中的演示目的
将服务作为控制台应用程序运行
安装前,Tim 运行应用程序进行测试。 定时器会将时间戳正确添加到 heartbeat.txt。 他使用 Notepad++ 的监控功能显示实时更新。
安装和验证服务
Tim 将 bin\Debug 文件夹中的 .exe 和相关文件复制到一个永久位置(如 C:\demos\HeartbeatService)。 他使用管理命令提示符运行以下命令:
SimpleHeartbeatService.exe install
SimpleHeartbeatService.exe startSimpleHeartbeatService.exe install
SimpleHeartbeatService.exe start将服务添加到服务控制管理器。 再次打开 "服务 "选项卡并单击 "刷新",服务现在可见并正在运行。
"安装服务真的很简单,使用服务做事情也很简单"。
卸载
SimpleHeartbeatService.exe uninstallSimpleHeartbeatService.exe uninstall回顾:优势和注意事项
Tim 回顾说,使用 Topshelf 创建和安装服务非常简单。 不过,他提醒说,无限写入文件可能会导致存储问题,这也是正确管理日志的一个很好的提醒。
现实世界的服务理念
Tim 分享了有关 Windows 服务的实用想法:
文件夹清理:删除下载中的旧文件
图片整理:按日期将照片分类到文件夹中
CSV 处理:观察文件夹并将 CSV 自动导入数据库
- 电子邮件自动化:监控服务台表格并发送通知
这些示例展示了如何使用服务自动执行后台任务,以及如何与 SQL Server、OneDrive 和任务调度程序等工具集成。
最后的想法
最后,Tim 鼓励开发人员进行尝试。 注意内存、存储和事件记录。 如果您需要自动更新、安全设置或更强大的部署,则需要进一步配置。
"这里有很多功能,你可以做很多事情"。
结论
利用 Tim Corey 在其 视频中的逐步演示,用 C# 创建 Windows 服务变得易学实用。 利用 Topshelf,只需进行最少的设置,就能将控制台应用程序转换为功能完备的 Windows 服务。无论是管理日志文件、处理数据库事件还是执行自动化,服务都为构建实时、后台 .NET Framework 或 .NET Core 应用程序提供了一种功能强大且可扩展的方式。
将本教程作为您了解、创建和高效安装服务的完整途径。 不要忘记进行全面测试,并始终以管理员身份运行安装程序或命令提示符。



