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 // 停止並刪除服務