ServiceSelf

做过服务进程功能的同学应该接触过Topshelf这个项目,它在.netframework年代神一搬的存在,我也特别喜欢它。遗憾的是在.netcore时代,这个项目对.netcore程序的支持没有跟进,最近项目也存档停止更新了。

我在开源的一些工具里实现放了自安装和卸载服务的功能的代码,本着够用就好的习惯,并没有把这个功能独立为项目,所以也没有对这个功能做特别好的设计。现在我创建了一个新的ServiceSelf开源项目,把自安装和卸载服务的功能在此重新设计,其功能是为.NET 泛型主机的应用程序提供自安装为服务进程的能力,支持windows和linux平台。

1 nuget

为了方便使用, nuget包已经发布到 https://www.nuget.org/packages/ServiceSelf/

<PackageReference Include="ServiceSelf" Version="1.0.0" />

2 使用示例

static void Main(string[] args)
{
    // 创建Host之前调用Service.UseServiceSelf(args)
    if (Service.UseServiceSelf(args))
    {
        var builder = WebApplication.CreateBuilder(args);

        // 为Host配置UseServiceSelf()
        builder.Host.UseServiceSelf();

        var app = builder.Build();
        app.MapGet("/", context => context.Response.WriteAsync("ServiceSelf"));
        app.Run();
    }
}
static void Main(string[] args)
{
    // 创建Host之前调用Service.UseServiceSelf(args)
    if (Service.UseServiceSelf(args))
    {
        var host = Host.CreateDefaultBuilder(args)
            // 为Host配置UseServiceSelf()
            .UseServiceSelf()
            .ConfigureServices(service =>
            {
                service.AddHostedService<AppHostedService>();
            })
            .Build();

        host.Run();
    }
}

3 服务控制

当yourapp集成ServiceSelf之后,在管理员或root下使用如下命令控制yourapp服务

yourapp.exe start // 安装并启动服务
yourapp.exe stop // 停止并删除服务
sudo ./yourapp start // 安装并启动服务
sudo ./yourapp stop // 停止并删除服务
04-16 02:50