美文网首页
如何把一个.NET应用转换成Windows服务程序

如何把一个.NET应用转换成Windows服务程序

作者: 达哥傻乐 | 来源:发表于2023-11-22 16:42 被阅读0次

碰到这个问题,改造完成后写下来备忘,注意这里的.NET应用指的不是.NET Framework,.NET Framework的玩法参见:
给WPF程序添加以Windows服务的方式运行的功能 - 简书 (jianshu.com)
整个过程就两步:

  1. 添加第一个类Worker.cs
namespace MyDotNETService
{
    public class Worker : BackgroundService
    {
        private readonly ILogger<Worker> _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);
            }
        }
    }
}

添加第二个类program.cs

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging.Configuration;
using Microsoft.Extensions.Logging.EventLog;
using WindowsSecurityLogCollectorService;



//Added by Darwin
HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);
builder.Services.AddWindowsService(options =>
{
    options.ServiceName = "My DotNET Service";
});

LoggerProviderOptions.RegisterProviderOptions<
    EventLogSettings, EventLogLoggerProvider>(builder.Services);

builder.Services.AddSingleton<Worker>();
builder.Services.AddHostedService<Worker>();
IHost host= builder.Build();
//above added by darwin

//IHost host = Host.CreateDefaultBuilder(args)
//    .ConfigureServices(services =>
//    {
//        services.AddHostedService<Worker>();
//    })
//    .Build();

host.Run();
  1. 修改类里的内容使适合自己的应用
    2.1 Worker类中的命名空间记得改,还有ExecuteAsync里的工作改成自己的内容,基本上只需要改_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);这一行即可。
    2.2 Program.cs中的服务名称My DotNET Service记得改成自己的。
  1. 补充一下服务的安装与卸载
    (以下命令在管理员权限运行的PowerShell中进行)
    3.1 服务的安装
New-Service -Name "Service Name" -BinaryPathName "ServiceExeFullPath"

3.2 服务的卸载

Remove-Service -Name "Service Name"

这个卸载的方法需要PowerShell 6.0或者以上版本,安装命令:

winget install --id microsoft.powershell --source winget

相关文章

网友评论

      本文标题:如何把一个.NET应用转换成Windows服务程序

      本文链接:https://www.haomeiwen.com/subject/wvqwwdtx.html