- [SQLSERVER] Loại bỏ Restricted User trên database MSSQL
- [C#] Hướng dẫn tạo mã QRcode Style trên winform
- [C#] Hướng dẫn sử dụng temp mail service api trên winform
- [C#] Hướng dẫn tạo mã thanh toán VietQR Pay không sử dụng API trên winform
- [C#] Hướng Dẫn Tạo Windows Service Đơn Giản Bằng Topshelf
- [C#] Chia sẻ source code đọc dữ liệu từ Google Sheet trên winform
- [C#] Chia sẻ source code tạo mã QR MOMO đa năng Winform
- [C#] Chia sẻ source code phần mềm lên lịch tự động chạy ứng dụng Scheduler Task Winform
- [Phần mềm] Tải và cài đặt phần mềm Sublime Text 4180 full version
- [C#] Hướng dẫn download file từ Minio Server Winform
- [C#] Hướng dẫn đăng nhập zalo login sử dụng API v4 trên winform
- [SOFTWARE] Phần mềm gởi tin nhắn Zalo Marketing Pro giá rẻ mềm nhất thị trường
- [C#] Việt hóa Text Button trên MessageBox Dialog Winform
- [DEVEXPRESS] Chia sẻ code các tạo report in nhiều hóa đơn trên XtraReport C#
- [POWER AUTOMATE] Hướng dẫn gởi tin nhắn zalo từ file Excel - No code
- [C#] Chia sẻ code lock và unlock user trong domain Window
- [DEVEXPRESS] Vẽ Biểu Đồ Stock Chứng Khoán - Công Cụ Thiết Yếu Cho Nhà Đầu Tư trên Winform
- [C#] Hướng dẫn bảo mật ứng dụng 2FA (Multi-factor Authentication) trên Winform
- [C#] Hướng dẫn convert HTML code sang PDF File trên NetCore 7 Winform
- [C#] Hướng dẫn viết ứng dụng chat với Gemini AI Google Winform
[C#] Hướng Dẫn Tạo Windows Service Đơn Giản Bằng Topshelf
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();
// .........................
});
Thanks for watching!