นี่เป็นวิธีที่ใหม่กว่าของวิธีเปลี่ยนแอปพลิเคชันคอนโซลเป็นบริการ Windows เป็นบริการผู้ปฏิบัติงานตาม. Net Core 3.1ล่าสุด
หากคุณสร้าง Worker Service จาก 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"