

新闻资讯
技术学院C#中创建Windows服务需继承ServiceBase类(.NET Framework)或使用Worker Service+UseWindowsService(.NET 6+),通过InstallUtil/sc create安装,由SCM管理启动停止。
在C#中创建Windows服务,核心是继承 ServiceBase 类,并通过安装工具注册到Windows服务管理器。它不是普通控制台或WinForm程序,不能直接双击运行,必须安装后由SCM(服务控制管理器)启动。
注意:.NET Core / .NET 5+ 不再原生支持传统Windows服务项目模板,但可通过 Worker Service + Microsoft.Extensions.Hosting.WindowsServices 实现等效功能。以下以经典 .NET Framework 为例(兼容性好、教程多):
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
更现代、跨平台友好的做法:
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 模型复用,更轻量、易测试、易维护。