.NET 开发 Windows 服务全程实战:后台守护 + 自动运行 + 部署安装
- C#
- 2小时前
- 8热度
- 0评论
来源: .NET 开发 Windows 服务全程实战:后台守护 + 自动运行 + 部署安装
作为.NET 开发者,你是否遇到过这些问题:写好的后台程序一关闭控制台窗口就停止运行?服务器重启后需要手动一个个启动程序?程序意外崩溃没人知道,导致业务中断几小时?
Windows 服务就是解决这些问题的标准答案。它是 Windows 系统原生支持的后台进程,无需用户登录即可自动运行,能在系统崩溃重启后自动恢复,是企业级定时任务、数据同步、消息消费、设备监控等场景的首选方案。
今天这篇文章,我将带你从零开始,用.NET 10 最新特性开发一个生产级 Windows 服务,涵盖项目创建、后台守护、异常自动恢复、系统自启动、一键部署安装全流程,所有代码均可直接复制使用。
一、为什么选择.NET Worker Service 开发 Windows 服务?
在.NET Core/.NET 5 + 时代,微软推出了专门的Worker Service 模板,彻底取代了传统的 Windows Service 项目模板,带来了诸多优势:
-
✅ 跨平台兼容:同一套代码可运行在 Windows、Linux、macOS 上 -
✅ 依赖注入原生支持:完美集成.NET 生态的 DI 容器 -
✅ 配置系统强大:支持 appsettings.json、环境变量、命令行参数 -
✅ 日志系统完善:内置 ILogger,可无缝对接 Serilog、NLog 等 -
✅ 生命周期管理清晰:提供 StartAsync、StopAsync、ExecuteAsync 标准方法 -
✅ 部署方式灵活:可发布为单文件、自包含应用,无需安装.NET 运行时
-
Visual Studio 2022 17.10+ 或 Rider 2024.1+ -
.NET SDK 10.0.0+(本文基于.NET 10 编写,兼容.NET 8/9) -
Windows 10/11 或 Windows Server 2016+
三、第一步:创建 Windows 服务项目
3.1 使用 Visual Studio 创建
-
打开 Visual Studio,选择 "创建新项目" -
搜索并选择 "辅助角色服务"(Worker Service)模板 -
输入项目名称 WindowsServiceDemo,选择.NET 10 作为目标框架 -
取消勾选 "使用控制器",点击 "创建"
Program.cs
:应用程序入口,负责配置和启动服务 Worker.cs
:后台工作者类,包含实际的业务逻辑
四、第二步:编写核心业务逻辑
我们来实现一个简单但实用的日志监控服务,它会每分钟记录一次系统状态,并写入日志文件。
4.1 修改 Worker.cs
4.2 配置日志系统(Serilog 集成)
为了方便排查问题,我们集成业界最常用的 Serilog 日志框架,支持文件滚动日志。
五、第三步:实现高级功能:后台守护与异常自动恢复
生产环境中,服务可能会因为各种原因崩溃,我们需要实现异常自动恢复机制和健康检查。
5.1 全局异常处理
修改 Program.cs,添加全局异常捕获:
5.2 实现服务自动重启
Windows 服务本身支持 "失败后重启" 功能,我们可以在安装时配置,也可以通过代码设置。
在 Worker.cs 中添加:
六、第四步:配置自动运行与服务依赖
6.1 设置服务启动类型
我们可以在安装时指定服务为 "自动" 启动,这样系统重启后会自动运行。
6.2 配置服务依赖
如果你的服务依赖于其他服务(如 SQL Server、RabbitMQ),可以在安装时指定依赖关系,确保它们按顺序启动。
七、第五步:部署安装 Windows 服务
7.1 发布应用程序
首先将应用程序发布为自包含的单文件:
bin\Release\net10.0\win-x64\publish目录下。7.2 使用 PowerShell 安装服务
以管理员身份打开 PowerShell,执行以下命令:
7.4 使用安装包工具(进阶)
对于需要分发给客户的场景,推荐使用 Inno Setup 或 WiX Toolset 制作安装包,实现一键安装、升级、卸载。
八、常见问题与解决方案
Q1:服务启动后立即停止怎么办?
-
检查日志文件,查看是否有未处理的异常 -
确保以管理员身份运行安装命令 -
检查文件路径是否正确,是否有空格 -
确保.NET 运行时已安装(如果不是自包含发布)
-
开发阶段直接按 F5 运行,Worker Service 会以控制台程序形式运行 -
生产环境可以使用 dotnet run --console命令以控制台模式运行 -
使用 Visual Studio 的 "附加到进程" 功能调试正在运行的服务
-
将服务的登录身份改为具有网络访问权限的域用户 -
不要使用 Local System 账户访问网络资源
九、总结
通过本文的学习,你已经掌握了用.NET 10 开发生产级 Windows 服务的完整流程。从项目创建到部署安装,从基础业务逻辑到高级的异常恢复和自动运行,所有内容都是我在实际项目中总结的经验。
Windows 服务是.NET 开发者必备的技能之一,掌握它可以让你轻松应对各种后台任务场景,提升系统的稳定性和可靠性。
学习资料
-
本文所有完整可运行的源码 -
生产级 Windows 服务模板(含健康检查、配置热更新) -
Inno Setup 一键安装包脚本 -
常见问题排查手册 -
服务监控与告警最佳实践 -
十个项目实战完整源码
💥领取方式:关注我的公众号【.NET快速高薪】,后台回复关键词【888】,即可免费获取全部资料!
如果你觉得这篇文章对你有帮助,欢迎点赞、收藏、转发给更多需要的朋友。有任何问题也可以在评论区留言,我会一一解答。