📜  c# windows service .net core - C# (1)

📅  最后修改于: 2023-12-03 14:59:41.100000             🧑  作者: Mango

C# Windows Service .NET Core

简介

C# Windows Service 是一个基于 .NET Core 的后台服务程序,可以在 Windows 上自动运行并执行一些任务,比如定时任务、数据收集、网络通信等。这种服务程序与常规的应用程序不同,它没有用户界面,可以自动启动并以后台方式运行,可以在系统启动时自动启动,并在关闭时自动停止。

.NET Core 是一个跨平台的开源框架,它支持 Windows、Linux、macOS 等多种操作系统,以及多种运行时环境,比如 Docker、Azure、Kubernetes 等。使用 .NET Core 可以轻松地开发、构建和部署 C# Windows Service。

如何创建 C# Windows Service
步骤一:创建 .NET Core 项目

首先,我们需要创建一个 .NET Core 项目作为我们的 Windows Service 程序的代码基础。可以使用任何 IDE 或文本编辑器来创建项目,比如 Visual Studio、VS Code 或者命令行。

使用命令行创建 .NET Core 项目:

# 创建项目目录
mkdir WindowsService
cd WindowsService

# 创建 .NET Core 项目
dotnet new console -n MyService
步骤二:安装 Microsoft.Extensions.Hosting 和 Microsoft.Extensions.Hosting.WindowsServices NuGet 包

在我们的 Windows Service 程序中,我们需要使用 Microsoft.Extensions.Hosting 和 Microsoft.Extensions.Hosting.WindowsServices NuGet 包来提供服务和管理 Windows 服务生命周期。使用以下命令来安装这两个包:

# 安装 Microsoft.Extensions.Hosting 和 Microsoft.Extensions.Hosting.WindowsServices 包
cd MyService
dotnet add package Microsoft.Extensions.Hosting
dotnet add package Microsoft.Extensions.Hosting.WindowsServices
步骤三:编写 Windows Service 代码

我们需要编写一些 C# 代码来定义我们的 Windows Service。我们需要继承自 Microsoft.Extensions.Hosting.WindowsServices.WindowsServiceBase 类,并在 StartAsync 和 StopAsync 方法中编写服务的启动和停止逻辑。

以下是一个简单的 Windows Service 示例代码:

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
using System.ServiceProcess;
using System.Threading;
using System.Threading.Tasks;

namespace MyService
{
    public class MyWindowsService : Microsoft.Extensions.Hosting.WindowsServices.WindowsServiceBase
    {
        private readonly IHost _host;
        private readonly ILogger _logger;

        public MyWindowsService(IHost host, ILogger<MyWindowsService> logger)
        {
            _host = host;
            _logger = logger;
        }

        protected override async void OnStarting(string[] args)
        {
            _logger.LogInformation("OnStarting...");

            await _host.StartAsync();
        }

        protected override async void OnStopping()
        {
            _logger.LogInformation("OnStopping...");

            await _host.StopAsync(TimeSpan.FromSeconds(10));
        }

        protected override void Dispose(bool disposing)
        {
            _logger.LogInformation("Dispose...");

            base.Dispose(disposing);

            if (disposing)
            {
                _host.Dispose();
            }
        }
    }

    class Program
    {
        static async Task Main(string[] args)
        {
            var hostBuilder = Host.CreateDefaultBuilder(args)
                .ConfigureServices((services) =>
                {
                    services.AddHostedService<MyWindowsService>();
                })
                .ConfigureLogging(logging =>
                {
                    logging.AddEventLog();
                });

            await hostBuilder.RunAsServiceAsync();
        }
    }
}

在这个简单的 Windows Service 示例代码中,我们通过依赖注入注册了一个 MyWindowsService 类作为 Windows Service。MyWindowsService 继承自 WindowsServiceBase 类,并重写了 OnStarting、OnStopping 和 Dispose 方法。在这些方法中,我们可以编写 Windows Service 的启动和停止逻辑,以及资源管理逻辑。

我们还通过 Host.CreateDefaultBuilder 方法创建一个默认主机生成器,这可以帮助我们轻松地配置和构建主机。我们还使用 AddEventLog 方法将日志输出到 Windows 事件日志中。

步骤四:注册和安装 Windows Service

Windows Service 必须先注册到 Windows 中,然后才能安装并启动。我们可以使用 sc.exe 命令行工具来注册和安装 Windows Service。

以下是注册和安装 Windows Service 的命令行示例:

# 注册 Windows Service
sc.exe create MyService binPath= "<path-to-your-service-exe>" start= auto

# 安装 Windows Service
sc.exe start MyService
总结

C# Windows Service 是一个非常有用的工具,可以在后台自动运行一些任务,比如定时任务、数据收集、网络通信等。借助 .NET Core 的跨平台性和开源性,我们可以轻松地开发、构建和部署 C# Windows Service。

在本文中,我们介绍了如何创建、注册、安装和运行 C# Windows Service,希望能够帮助程序员更好地理解这种服务程序的原理和操作方法。