新闻中心
C# 怎么创建一个 Windows 服务_C# Windows 服务创建与部署指南
答案:使用.NET 6 Worker Service模板创建Windows服务,通过添加Microsoft.Extensions.Hosting.WindowsServices包并配置宿主模型,实现后台任务运行;部署时用sc命令安装并设置开机自启,开发阶段可通过控制台调试,日志建议输出到文件或事件日志。

创建一个 Windows 服务在 C# 中并不复杂,但需要理解其运行机制和部署流程。Windows 服务是在后台运
行的长期进程,适合执行定时任务、监控系统或托管长时间运行的服务逻辑。下面是一个完整的创建与部署指南。
创建 Windows 服务项目
打开 Visual Studio,按照以下步骤新建项目:
- 选择“创建新项目”
- 搜索并选择“Windows 服务 (.NET Framework)”模板(注意:目前原生 .NET/.NET Core/.NET 5+ 的 Windows 服务需手动配置,推荐使用 .NET 6 或以上版本配合 Worker Service 模板)
- 命名项目,例如 MyWinService
如果你使用的是 .NET 6 或更高版本,建议选择“Worker Service”模板,它更适合现代 Windows 服务开发,并支持跨平台。
编写服务逻辑(以 .NET 6 Worker Service 为例)
在 Program.cs 中,使用内置的宿主模型来注册后台服务:
builder.Services.AddHostedService
在 Worker.cs 文件中实现你的业务逻辑:
public class Worker : BackgroundService
{
private readonly ILogger
public Worker(ILogger<Worker> logger)
{
_logger = logger;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
await Task.Delay(1000, stoppingToken); // 每秒执行一次
}
} }
这个 Worker 类继承自 BackgroundService,会在服务启动时自动调用 ExecuteAsync 方法。
将应用配置为 Windows 服务
要让 .NET 应用作为 Windows 服务运行,需要添加 NuGet 包并修改宿主配置。
- 安装 NuGet 包:Microsoft.Extensions.Hosting.WindowsServices
修改 Program.cs,启用 Windows 服务支持:
var isService = !string.IsNullOrEmpty(Environment.GetCommandLineArgs().FirstOrDefault(arg => arg.ToLower() == "--windows-service"));
var builder = Host.CreateApplicationBuilder(args);
if (isService)
{
builder.Services.AddWindowsService(options =>
{
options.ServiceName = "MySampleWinService";
});
}
else
{
builder.Services.AddConsoleLifetime();
}
builder.Services.AddHostedService
var host = builder.Build();
易标AI
告别低效手工,迎接AI标书新时代!3分钟智能生成,行业唯一具备查重功能,自动避雷废标项
135
查看详情
await host.RunAsync();
这样,当应用以服务方式运行时,会自动识别并注册为 Windows 服务。
发布与部署服务
完成开发后,发布项目并部署为服务:
- 右键项目 → “发布” → 选择文件夹发布路径(如 C:\MyServices\MyWinService)
- 使用 sc 命令行工具安装服务:
sc create MySampleWinService binPath="C:\MyServices\MyWinService\MyWinService.exe --windows-service" start=auto
说明:
- MySampleWinService 是服务名称
- binPath 指向可执行文件,并传递 --windows-service 参数用于识别运行模式
- start=auto 表示开机自启
启动服务:
sc start MySampleWinService查看服务状态:
sc query MySampleWinService卸载服务(如需):
sc delete MySampleWinService调试与日志建议
Windows 服务无法直接调试。建议:
- 开发阶段通过控制台运行(不传 --windows-service 参数),验证逻辑
- 使用 ILogger 记录日志,输出到文件或 Event Log
- 部署后检查 Windows 事件查看器中的应用程序日志
若需写入 Windows 事件日志,可添加:
builder.Logging.AddEventLog();基本上就这些。只要结构清晰,.NET 的宿主模型让 Windows 服务变得简单可控。
以上就是C# 怎么创建一个 Windows 服务_C# Windows 服务创建与部署指南的详细内容,更多请关注其它相关文章!
# 如果你
# 一分钟了解网站建设方案
# 网站推广优化该怎么做
# 南宁seo优化网络推广渠道
# 苏州商会网站建设
# 地摊经济seo优化
# 网站建设不够细致的原因
# 关键词seo排名选哪家
# seo推广还是电商运营
# 长春快速推广网站
# 网站优化师面试问题汇总
# 长时间
# 推荐使用
# 抽象类
# 是在
# c#
# 是一个
# 的是
# 如何实现
# 如何使用
# 创建一个
# elif
# .net
# nas
# microsoft
# win
# ai
# 工具
# app
# windows
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
fishbowl官网免费版 fishbowl养鱼网站入口
汽车之家官方网站官网入口_汽车之家网页版直接进入
sublime怎么设置启动时打开的窗口_sublime会话管理与热退出
Yandex搜索引擎官网入口_俄罗斯Yandex免登录一键直达
mcjs网页版流畅运行 mcjs低配电脑畅玩入口
反效果?《战地6》免费试玩开启后玩家数不升反降
Lar*el Excel导入时生成自定义递增ID的策略与实践
qq游戏手机版下载安装_qq游戏移动端入口
Golang如何优雅处理error_Golang error处理最佳实践总结
QQ邮箱登录官网首页 腾讯QQ邮箱网页入口
c++中的std::forward_list和std::list有什么不同_c++ forward_list与list区别分析
电脑屏幕颜色不舒服怎么办_Windows夜间模式与色彩校准教程【护眼技巧】
Golang如何通过reflect获取匿名字段方法_Golang reflect匿名字段方法访问技巧
AI泡沫首次被“刺破”:GPU十年都无法存活!
Go Martini框架:动态服务解码后的图片内容
J*a递归快速排序中静态变量的状态管理与陷阱
黑猫投诉统一入口官网 消费者权益保护投诉平台
Golang如何实现微服务鉴权与权限控制_Golang微服务鉴权与权限管理实践
响应式CSS Grid布局:优化网格项在小屏幕下的堆叠与宽度适配
在J*a中如何使用Exception包装底层异常_异常包装与信息传递方法说明
Bing引擎入口最新2025 Bing搜索免费官方登录
UE5.7引擎表现爆炸优化无敌!5090跑4K稳定60FPS
怎样把文件彻底粉碎无法恢复_Windows下安全删除敏感数据【隐私保护】
蛙漫2日版入口 WAMAN2(日版)无删减漫画官网链接
CSS如何设置hover状态颜色_hover伪类调整背景或文字颜色
Lar*el DB::listen 事件中的查询执行时间单位解析
sublime怎么覆盖插件的默认快捷键_sublime快捷键优先级与设置
CSS布局中意外空白:解决padding-top导致的顶部间距问题
html怎么在cmd下运行php文件_cmd运行html中php文件方法【教程】
vivo手机参数配置怎么增强信号_vivo手机参数配置信号增强方法
《燕云十六声》两周内达九百万玩家!位居畅销榜第五
蛙漫漫画免费阅读入口_蛙漫官方正版无广告纯净版
如何有效阻止外部脚本意外修改内联样式的高度属性
c++如何实现一个简单的软件渲染器_c++从零开始的3D图形学
c++如何使用std::memory_order控制原子操作顺序_c++ C++11内存模型详解
J*a TimerTask文件监控:HashMap状态管理与常见陷阱规避指南
如何创建没有密码的Windows本地账户_跳过微软账户登录的技巧【教程】
J*aScript类型检查_j*ascript代码规范
HTML长属性值处理:表单action路径优化与代码规范应对
Excel中VLOOKUP的第四个参数是干什么用的_Excel VLOOKUP第四参数作用解析
Python实现多节点属性重叠度分析教程
随机参数递归函数的基准调用次数与时间复杂度探究
QQ邮箱官方网页版登录 QQ邮箱个人邮箱快速访问
《北京人工智能产业白皮书(2025)》发布:全年核心产值预计突破 4500 亿元
J*aScript中正确使用querySelectorAll与复杂CSS选择器
树莓派传感器触发:通过Twilio API发送WhatsApp消息教程
如何在Promise链中优雅地中断后续then执行
字由网在线版登录地址 字由网网页版安全入口
1688商家版怎样分析买家画像精准供货_1688商家版分析买家画像精准供货【供货策略】
在Pyomo中实现基于变量的条件约束:Big-M方法详解


2025-11-09
浏览次数:次
返回列表