贝利信息

C# 如何创建Windows服务 - 后台长时间运行任务的实现

日期:2025-12-12 00:00 / 作者:星降
答案:在Windows上用C#创建稳定服务需继承ServiceBase,重写OnStart/OnStop,启动后台任务不阻塞主线程,安全停止并释放资源,避免UI操作,通过sc.exe或InstallUtil注册服务,推荐使用Worker Service + Microsoft.Extensions.Hosting.WindowsServices实现跨平台兼容,注重日志记录与调试设计。

在 Windows 上用 C# 创建服务,核心是让程序以系统服务方式运行,不依赖用户登录、不显示界面、能随系统启动自动运行。关键不是“写个控制台程序然后装成服务”,而是从设计上遵循 Windows 服务生命周期(OnStart/OnStop)、避免 UI 操作、正确处理异常和资源释放。

使用 ServiceBase 基类实现服务主体

新建一个“Windows Service (.NET Framework)”项目(注意:.NET Core/.NET 5+ 不直接支持传统 Windows Service 模板,需用 Worker Service + Topshelf 或 Microsoft.Extensions.Hosting.WindowsServices;本文以经典 .NET Framework 为例)。

你的主服务类需继承 ServiceBase,重写 OnStartOnStop 方法:

安装与卸载服务(sc.exe 或 InstallUtil.exe)

编译后生成可执行文件(.exe),它本身不是服务,需注册到 Windows 服务控制管理器(SCM):

调试技巧:避免每次安装/启动服务再试

服务无法直接按 F5 调试。推荐两种高效方式:

.NET 5/6/7+ 推荐方案:Worker Service + Windows Service 支持

新项目应优先选 Worker Service 模板,再通过 NuGet 引用 Microsoft.Extensions.Hosting.WindowsServices

基本上就这些。重点不在“怎么注册”,而在“怎么写得稳”:响应及时启停、不卡主线程、不泄漏资源、不假定用户环境。服务不是高级控制台程序,它是操作系统级的长期协作者。