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服務
windows平臺
yourapp.exe start // 安裝並啟動服務
yourapp.exe stop // 停止並刪除服務
linux平臺
sudo ./yourapp start // 安裝並啟動服務
sudo ./yourapp stop // 停止並刪除服務