集成topShelf

This commit is contained in:
陈国伟 2021-06-18 09:43:04 +08:00
parent 2822745937
commit fb9e180e14
3 changed files with 51 additions and 1 deletions

View File

@ -6,12 +6,18 @@
<TargetFrameworks>net5.0;net6.0</TargetFrameworks>
<EnableCompressionInSingleFile>true</EnableCompressionInSingleFile>
<Version>1.0.0-beta2</Version>
<Description>github定制版的dns服务解析github最优的ip</Description>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
</PropertyGroup>
<PropertyGroup Condition="'$(TargetFramework)' == 'net6.0'">
<EnableCompressionInSingleFile>true</EnableCompressionInSingleFile>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Topshelf" Version="4.3.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\FastGithub.Dns\FastGithub.Dns.csproj" />
</ItemGroup>

View File

@ -0,0 +1,44 @@
using Microsoft.Extensions.Hosting;
using System;
using System.Reflection;
using Topshelf;
namespace FastGithub
{
static class HostBuilderExtensions
{
/// <summary>
/// topShelf管理运行
/// </summary>
/// <param name="hostBuilder"></param>
/// <returns></returns>
public static void RunAsTopShelf(this IHostBuilder hostBuilder)
{
if (OperatingSystem.IsWindows())
{
HostFactory.Run(c =>
{
var assembly = typeof(HostBuilderExtensions).Assembly;
var assemblyName = assembly.GetName().Name;
var assemblyDescription = assembly.GetCustomAttribute<AssemblyDescriptionAttribute>();
c.RunAsLocalSystem();
c.SetServiceName(assemblyName);
c.SetDisplayName(assemblyName);
c.SetDescription(assemblyDescription?.Description);
c.Service<IHost>(service => service
.ConstructUsing(() => hostBuilder.Build())
.WhenStarted(service => service.Start())
.WhenStopped(service => service.StopAsync())
);
});
}
else
{
hostBuilder.Build().Run();
}
}
}
}

View File

@ -10,7 +10,7 @@ namespace FastGithub
/// <param name="args"></param>
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
CreateHostBuilder(args).RunAsTopShelf();
}
/// <summary>