C#怎么创建Windows服务 C#编写后台服务程序方法
技术百科
星降
发布时间:2025-12-25
浏览: 次 C#中创建Windows服务需继承ServiceBase类(.NET Framework)或使用Worker Service+UseWindowsService(.NET 6+),通过InstallUtil/sc create安装,由SCM管理启动停止。
在C#中创建Windows服务,核心是继承 ServiceBase 类,并通过安装工具注册到Windows服务管理器。它不是普通控制台或WinForm程序,不能直接双击运行,必须安装后由SCM(服务控制管理器)启动。
一、新建Windows服务项目(.NET Framework)
注意:.NET Core / .NET 5+ 不再原生支持传统Windows服务项目模板,但可通过 Worker Service + Microsoft.Extensions.Hosting.WindowsServices 实现等效功能。以下以经典 .NET Framework 为例(兼容性好、教程多):
- Visual Studi
o 中新建项目 → 选择“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 模型复用,更轻量、易测试、易维护。
# windows
# 自动生成
# 可通过
# 为例
# app
# 双击
# 右键
# 命令行
# 工具
# win
# microsoft
# auto
# 端口
# 区别
# c#
# 数据库
# .net
# visual studio
# 线程
# 安装程序
# 继承
# 管理器
# yy
# 必须安装
# 性好
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Windows 11怎么设置默认解压软件_Wind
- php怎么操作Redis_Redis扩展连接与基本
- Linux如何安装Tomcat应用服务器_Linu
- Windows蓝屏错误0x0000002C怎么解决
- Linux怎么设置磁盘配额_Linux系统Quot
- Mac的访达(Finder)怎么用_Mac文件管理
- Windows 11怎么更改锁屏超时时间_Wind
- Go 中 defer 语句在 goroutine
- 企业SEO优化选择网站建设模板的技巧
- Win11怎么开启移动热点_Windows11共享
- Win11怎么设置屏保时间_调整Win11屏幕保护
- Win11怎么关闭任务栏小图标_Windows11
- LINUX怎么进行文本内容搜索_Linux gre
- Windows笔记本无法进入睡眠模式怎么办?(电源
- MySQL 中使用 IF 和 CASE 实现查询字
- c++中如何对数组进行排序_c++数组排序算法汇总
- Win11怎么用设置清理回收站_Win11设置清理
- Win11怎么关闭自动调节亮度_Windows11
- PHP怎么接收URL中的锚点参数_获取#后面参数值
- Win11怎么开启远程桌面连接_Windows11
- php订单日志权限怎么设_php订单日志文件权限设
- VSC怎样在VSC中调试PHPAPI_接口调试技巧
- c++中如何使用auto关键字_c++11类型推导
- Windows10电脑怎么设置虚拟光驱_Win10
- Windows10如何更改计算机工作组_Win10
- 如何使用Golang匿名函数_快速定义临时函数逻辑
- c++怎么调用nana库开发GUI_c++ 现代风
- Win11怎么设置任务栏透明_Windows11使
- Win11怎么禁用键盘自带键盘_Win11笔记本禁
- mac本地php环境如何开启curl_curl扩展
- Mac如何修改Hosts文件?(本地开发与屏蔽网站
- PowerShell怎么创建复杂的XML结构
- PHP主流架构怎么处理表单验证_规则与自定义【技巧
- php接口返回数据乱码怎么办_php接口调试编码问
- Windows10如何更改鼠标图标_Win10鼠标
- Win11局域网共享怎么设置 Win11文件夹网络
- c++怎么设置线程优先级与cpu亲和性_c++ 多
- c++怎么操作redis数据库_c++ hired
- Win10如何关闭安全中心所有通知 Win10禁用
- MAC如何隐藏文件夹及文件_MAC终端命令隐藏与第
- TestNG的testng.xml配置文件怎么写
- Windows10电脑怎么连接蓝牙设备_Win10
- Win11怎么设置单手模式_Win11触控键盘布局
- 如何使用正则表达式批量替换重复的星号-短横模式为固
- php怎么捕获异常_trycatch结构处理运行时
- 如何使用Golang开发简单的聊天室消息存储_Go
- Win11怎样安装剪映专业版_Win11安装剪映教
- Windows10怎么查看系统激活状态_Windo
- PythonPandas数据分析项目教程_时间序列
- 如何高效获取循环末次生成的 NumPy 数组最后一

o 中新建项目 → 选择“Windows Service (.NET Framework)”
QQ客服