最新の.Net Core 3.1に基づいて、コンソールアプリケーションをワーカーサービスとしてWindowsサービスに変換する新しい方法を次に示します。ます。
Visual Studio 2019からワーカーサービスを作成すると、Windowsサービスを作成するために必要なほぼすべてのものが提供されます。これは、コンソールサービスをWindowsサービスに変換するために変更する必要があるものでもあります。
以下に、必要な変更を示します。
次のNuGetパッケージをインストールする
Install-Package Microsoft.Extensions.Hosting.WindowsServices -Version 3.1.0
Install-Package Microsoft.Extensions.Configuration.Abstractions -Version 3.1.0
Program.csを以下のような実装に変更します。
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace ConsoleApp
{
class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).UseWindowsService().Build().Run();
}
private static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
});
}
}
サービスオペレーションによって実行されるコードを配置するWorker.csを追加します。
using Microsoft.Extensions.Hosting;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleApp
{
public class Worker : BackgroundService
{
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
//do some operation
}
public override Task StartAsync(CancellationToken cancellationToken)
{
return base.StartAsync(cancellationToken);
}
public override Task StopAsync(CancellationToken cancellationToken)
{
return base.StopAsync(cancellationToken);
}
}
}
すべての準備が整い、アプリケーションが正常にビルドされたら、sc.exeを使用して、次のコマンドでコンソールアプリケーションのexeをWindowsサービスとしてインストールできます。
sc.exe create DemoService binpath= "path/to/your/file.exe"