Xin chào các bạn, bài viết hôm nay mình hướng dẫn các bạn sử dụng thư viện Topshelf để tạo một dịch vụ windows service trên windows C# một cách nhanh chóng và dễ dàng.
[C#] Creating a Simple Windows Service Using Topshelf
Ở bài viết này mình hướng dẫn các bạn tạo 1 dịch vụ mở dụng chạy theo danh sách thời gian mà chúng ta thêm vào.

1. Đầu tiên, các bạn cài đặt thư viện Topshelt từ Nuget
PM> Install-Package Topshelf
2. Tạo một class MyServices.cs
để định nghĩa một services đơn giản
using System;
using System.Timers;
namespace MyTopshelfService
{
public class MyService
{
private Timer _timer;
private readonly string[] _scheduleTimes;
public MyService()
{
// Danh sách thời gian chạy, định dạng HH:mm:ss
_scheduleTimes = new[] { "09:00:00", "12:00:00", "15:00:00" };
}
public void Start()
{
Console.WriteLine("Service started...");
_timer = new Timer(1000); // Kiểm tra mỗi giây
_timer.Elapsed += OnTimerElapsed;
_timer.Start();
}
public void Stop()
{
Console.WriteLine("Service stopped...");
_timer?.Stop();
}
private void OnTimerElapsed(object sender, ElapsedEventArgs e)
{
var currentTime = DateTime.Now.ToString("HH:mm:ss");
foreach (var scheduledTime in _scheduleTimes)
{
if (currentTime == scheduledTime)
{
RunScheduledTask();
}
}
}
private void RunScheduledTask()
{
Console.WriteLine($"Task started at {DateTime.Now}");
// Thêm logic công việc bạn muốn thực hiện ở đây
}
}
}
3. Cấu hình Topshelf
Trong Program.cs
, cấu hình Topshelf để chạy service này.
using System;
using Topshelf;
namespace MyTopshelfService
{
class Program
{
static void Main(string[] args)
{
HostFactory.Run(x =>
{
x.Service<MyService>(s =>
{
s.ConstructUsing(name => new MyService());
s.WhenStarted(tc => tc.Start());
s.WhenStopped(tc => tc.Stop());
});
x.RunAsLocalSystem();
x.SetServiceName("MyTopshelfService");
x.SetDisplayName("My Topshelf Service");
x.SetDescription("A simple Topshelf service with a time-based schedule.");
});
}
}
}
HostFactory.Run()
sẽ quản lý vòng đời của service.RunAsLocalSystem()
cấu hình service chạy với quyền của hệ thống cục bộ.- Các phương thức
SetServiceName()
,SetDisplayName()
, vàSetDescription()
thiết lập các thông tin liên quan đến service khi bạn cài đặt nó.
4. Cách cài đặt dịch vụ services và gỡ bỏ nó
- Cài đặt service: MyTopshelfService.exe install
- Khởi động service: MyTopshelfService.exe start
- Dừng service: MyTopshelfService.exe stop
- Gỡ bỏ service: MyTopshelfService.exe uninstall
5. Topshelf cũng hổ trợ chúng ta ghi log một cách dễ dàng khi tích hợp với thư viện log4net, nlog
Sử dụng Log4NET
// Install-Package Topshelf.Log4Net
HostFactory.Run(x =>
{
x.UseLog4Net();
// .........................
});
Sử dụng Nlog
// Install-Package Topshelf.NLog
HostFactory.Run(x =>
{
x.UseNLog();
// .........................
});