過程 略json
namespace TopshelfDemo { public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureServices((hostContext, services) => { services.AddHostedService<Worker>(); }); } }
略windows
public class Program { public static void Main(string[] args) { HostFactory.Run(x => { x.Service<IHost>(s => { s.ConstructUsing(() => CreateHostBuilder(args).Build()); s.WhenStarted(service => { service.Start(); }); s.WhenStopped(service => { service.StopAsync(); }); }); x.StartAutomatically(); x.RunAsLocalSystem(); x.SetServiceName("TopshelfDemo.ServiceName"); x.SetDisplayName("TopshelfDemo.DisplayName"); x.SetDescription("TopshelfDemo.Description"); }); } public static IHostBuilder CreateHostBuilder(string[] args) => Microsoft.Extensions.Hosting.Host.CreateDefaultBuilder(args) .ConfigureServices((hostContext, services) => { services.AddHostedService<Worker>(); }); }
寫法以下:async
public class Program { private IHost _host; public Program() { _host = new HostBuilder() .Build(); } public async Task StartAsync() { _host.StartAsync(); } public async Task StopAsync() { using (_host) { await _host.StopAsync(TimeSpan.FromSeconds(5)); } } }
找到相應的文件夾
TopshelfDemo.exe install
ui
TopshelfDemo.exe start
spa
TopshelfDemo.exe uninstall
.net
Host.CreateDefaultBuilder(args) .ConfigureHostConfiguration(configHost => { configHost.SetBasePath(Directory.GetCurrentDirectory()); configHost.AddJsonFile("hostsettings.json", optional: true); configHost.AddEnvironmentVariables(prefix: "PREFIX_"); configHost.AddCommandLine(args); });
Host.CreateDefaultBuilder(args) .UseEnvironment("Development") //...
.ConfigureLogging((context, logger) => { logger.AddConsole(); //logger.AddLog4Net(); logger.SetMinimumLevel(LogLevel.Information); })
public class ToDoWork { public string TimeNow() { return DateTime.Now.ToString(); } } program.cs .ConfigureServices((hostContext, services) => { services.AddScoped<ToDoWork>(); services.AddHostedService<Worker>(); });
using System.IO; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Topshelf; namespace TopshelfDemo { public class Program { public static void Main(string[] args) { HostFactory.Run(x => { x.Service<IHost>(s => { s.ConstructUsing(() => CreateHostBuilder(args).Build()); s.WhenStarted(service => { service.Start(); }); s.WhenStopped(service => { service.StopAsync(); }); }); x.StartAutomatically(); x.RunAsLocalSystem(); x.SetServiceName("TopshelfDemo.ServiceName"); x.SetDisplayName("TopshelfDemo.DisplayName"); x.SetDescription("TopshelfDemo.Description"); }); } public static IHostBuilder CreateHostBuilder(string[] args) => Microsoft.Extensions.Hosting.Host.CreateDefaultBuilder(args) .UseEnvironment(Environments.Development) //.UseEnvironment(Environments.Production) //.UseEnvironment(Environments.Staging) .ConfigureHostConfiguration(configHost => { configHost.SetBasePath(Directory.GetCurrentDirectory()); configHost.AddJsonFile("hostsettings.json", optional: true); configHost.AddEnvironmentVariables(prefix: "PREFIX_"); configHost.AddCommandLine(args); }) .ConfigureLogging((context, logger) => { logger.AddConsole(); //logger.AddLog4Net(); logger.SetMinimumLevel(LogLevel.Information); }) .ConfigureServices((hostContext, services) => { services.AddScoped<ToDoWork>(); services.AddHostedService<Worker>(); }); } }