.NET 开发 Windows 服务全程实战:后台守护 + 自动运行 + 部署安装

来源: .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 作为目标框架
  • 取消勾选 "使用控制器",点击 "创建"
3.2 使用命令行创建
图片
创建完成后,你会得到两个核心文件:
  • Program.cs
    :应用程序入口,负责配置和启动服务
  • Worker.cs
    :后台工作者类,包含实际的业务逻辑

四、第二步:编写核心业务逻辑

我们来实现一个简单但实用的日志监控服务,它会每分钟记录一次系统状态,并写入日志文件。

4.1 修改 Worker.cs

图片

4.2 配置日志系统(Serilog 集成)

为了方便排查问题,我们集成业界最常用的 Serilog 日志框架,支持文件滚动日志。

1.安装 NuGet 包
图片
2.修改 Program.cs
图片


五、第三步:实现高级功能:后台守护与异常自动恢复

生产环境中,服务可能会因为各种原因崩溃,我们需要实现异常自动恢复机制健康检查

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.3 常用服务管理命令
图片

7.4 使用安装包工具(进阶)

对于需要分发给客户的场景,推荐使用 Inno Setup 或 WiX Toolset 制作安装包,实现一键安装、升级、卸载。


八、常见问题与解决方案

Q1:服务启动后立即停止怎么办?

  • 检查日志文件,查看是否有未处理的异常
  • 确保以管理员身份运行安装命令
  • 检查文件路径是否正确,是否有空格
  • 确保.NET 运行时已安装(如果不是自包含发布)
Q2:如何调试 Windows 服务?
  • 开发阶段直接按 F5 运行,Worker Service 会以控制台程序形式运行
  • 生产环境可以使用dotnet run --console命令以控制台模式运行
  • 使用 Visual Studio 的 "附加到进程" 功能调试正在运行的服务
Q3:服务无法访问网络共享怎么办?
  • 将服务的登录身份改为具有网络访问权限的域用户
  • 不要使用 Local System 账户访问网络资源

九、总结

通过本文的学习,你已经掌握了用.NET 10 开发生产级 Windows 服务的完整流程。从项目创建到部署安装,从基础业务逻辑到高级的异常恢复和自动运行,所有内容都是我在实际项目中总结的经验。

Windows 服务是.NET 开发者必备的技能之一,掌握它可以让你轻松应对各种后台任务场景,提升系统的稳定性和可靠性。


学习资料

为了帮助你更快上手,我整理了一份《.NET Windows 服务开发完整资料包》,包含:
  • 本文所有完整可运行的源码
  • 生产级 Windows 服务模板(含健康检查、配置热更新)
  • Inno Setup 一键安装包脚本
  • 常见问题排查手册
  • 服务监控与告警最佳实践
  • 十个项目实战完整源码

💥领取方式:关注我的公众号【.NET快速高薪】,后台回复关键词【888】,即可免费获取全部资料!

如果你觉得这篇文章对你有帮助,欢迎点赞、收藏、转发给更多需要的朋友。有任何问题也可以在评论区留言,我会一一解答。