C#怎么创建Windows服务 C#编写后台服务程序方法

来源:这里教程网 时间:2026-02-21 17:35:20 作者:

在C#中创建Windows服务,核心是继承 ServiceBase 类,并通过安装工具注册到Windows服务管理器。它不是普通控制台或WinForm程序,不能直接双击运行,必须安装后由SCM(服务控制管理器)启动。

一、新建Windows服务项目(.NET Framework)

注意:.NET Core / .NET 5+ 不再原生支持传统Windows服务项目模板,但可通过 Worker Service + Microsoft.Extensions.Hosting.WindowsServices 实现等效功能。以下以经典 .NET Framework 为例(兼容性好、教程多):

Visual Studio 中新建项目 → 选择“Windows Service (.NET Framework)” 默认生成一个继承 ServiceBase 的类(如
Service1.cs
OnStart()
中写启动逻辑(如启动定时器、监听端口、轮询数据库)
OnStop()
中释放资源(关闭线程、断开连接、保存状态)

二、关键代码结构示例

以简单日志写入为例:

protected override void OnStart(string[] args)
{
    // 启动一个后台线程(或使用Timer),避免阻塞OnStart
    _timer = new Timer(WriteLog, null, TimeSpan.Zero, TimeSpan.FromMinutes(1));
}
private void WriteLog(object state)
{
    File.AppendAllText(@"C:\Logs\MyService.log", 
        $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}] Service is running.\r\n");
}
protected override void OnStop()
{
    _timer?.Dispose();
}

三、安装与部署服务

仅编译不等于可运行。必须安装才能被系统识别:

给项目添加“安装程序”(右键服务设计器 → “添加安装程序”)→ 自动生成
ProjectInstaller.cs
设置
serviceInstaller1.ServiceName
serviceProcessInstaller1.Account
(推荐 LocalSystem 或指定域账户)
命令行安装(管理员权限运行):
InstallUtil.exe MyService.exe
(路径需完整,
InstallUtil
C:\Windows\Microsoft.NET\Framework\v4.0.30319\
下)
卸载用:
InstallUtil.exe /u MyService.exe

四、.NET 6/7/8 推荐方式:Worker Service + Windows Services 支持

更现代、跨平台友好的做法:

新建“Worker Service”项目(.NET 6+) NuGet 安装:
Microsoft.Extensions.Hosting.WindowsServices
修改
Program.cs

Host.CreateDefaultBuilder(args).UseWindowsService()
Worker.cs
ExecuteAsync
中写后台逻辑(支持 DI、配置、日志)
发布后,用
sc create
命令注册:
sc create MyWorkerService binPath= "D:\path\MyWorker.exe" start= auto

基本上就这些。核心区别在于:传统方式重在 ServiceBase 生命周期控制;新方式重在 Hosting 模型复用,更轻量、易测试、易维护。

相关推荐