C# 怎么创建一个 Windows 服务_C# Windows 服务创建与部署指南

星降
发布: 2025-11-09 17:58:02
原创
835人浏览过
答案:使用.NET 6 Worker Service模板创建Windows服务,通过添加Microsoft.Extensions.Hosting.WindowsServices包并配置宿主模型,实现后台任务运行;部署时用sc命令安装并设置开机自启,开发阶段可通过控制台调试,日志建议输出到文件或事件日志。

c# 怎么创建一个 windows 服务_c# windows 服务创建与部署指南

创建一个 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>();

Worker.cs 文件中实现你的业务逻辑:

public class Worker : BackgroundService
{
private readonly ILogger _logger;

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驱动的一站式科研资源服务平台

维普科创助手 117
查看详情 维普科创助手

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 服务创建与部署指南的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号