Các bạn có thể xem toàn bộ video qua danh sách phát sau:
Chúc các bạn học tốt!
an cư lạc nghiệp
Tạo một trình ứng dụng loại Setup để cài đặt (Install)Service:
Bước 13:
Từ menu à File --> Add Project --> New Project.
Đặt tên Projects là SetupGiamSatThuMuc
Bước 14:
Trong cửa sổ Solution Explorer, click phải chuột tại SetupGiamSatThuMuc --> Add Project Output
Từ cửa sổ Add Project Output Group --> chọn Primary Output --> click OK
Bước 15:
Trong cửa sổ Solution Explorer, click phải chuột tại mục SetupGiamSatThuMuc -->View --> Custom Actions.
Bước 16 :
Tại mục Custom Actions --> click phải chuột --> Add Custom Action
Bước 17 :
Xuất hiện cửa sổ Select Item in Project --> Double-click mục Application Folder, chọn mục Primary Output from swGiamSatThuMuc (Active) --> click OK.
Bước 18 :
Thực hiện việc build trình ứng dụng SetupGiamSatThuMuc (chú ý nhớ chọn định cấu hình cho Solution là Release ).
Thêm vào thành phần Installer :
Bước 9:
Click chuyển sang cửa sổ design của GiamSatThuMuc.cs. Bên trong cửa sổ này click phải chuột à click chọn mục Add Installer .
Một class có tên là ProjectInstaller.cs sẽ được thêm vào project của bạn. Bạn sẽ thấy ở màn hình design của thành phần này có hai biểu tượng thành tố khác trên nó là :ServiceProcessInstaller1 và ServiceInstaller1.
Bước 10:
Click vào ServiceProcessInstaller1 và hiển thị cửa sổ Properties --> tại thuộc tínhAccount click chọn LocalSystem trong danh sách
Bước 11:
Click vào ServiceInstaller1 và hiển thị cửa sổ Properties. Chọn giá trị Automatic cho thuộc tính StartType
Bước 12:
Thực hiện việc build trình ứng dụng
Bước 5:
Trên cửa sổ design --> click vào biểu tượng EventLog --> cửa sổ Properties --> Tại mụcName đổi tên mặc định EventLog1 thành GetLoginNameEventLog
Bước 6:
Trên cửa sổ design --> click vào biểu tượng EventLog --> cửa sổ Properties --> Tại mụcName đổi tên mặc định EventLog1 thành SoGhiGiamSatThuMuc.
Bước 7:
Mở màn hình soạn thảo mã lệnh của GiamSatThuMuc.cs --> Bạn sẽ thấy rằng C# sẽ tự động bổ sung :
Dòng khai báo
using System.ServiceProcess
Khai báo kế thừa từ class :
System.ServiceProcess.ServiceBase
Hai phương thức quan trọng được bổ sung:
protected override void OnStart(string[] args) {
// TODO: Add code here to start your service.
}
protected override void OnStop(){
// TODO: Add code here to perform any tear-down necessary to stop your service.
}
Đây là hai phương thức có vai quan trọng. Các dòng lệnh mà bạn muốn chúng thực thi mỗi khi service start được đặt bên trong phương thức OnStart. Các dòng lệnh mà bạn muốn chúng thực thi mỗi khi service stop được đặt bên trong phương thức OnStop.
Bạn cần bổ sung vào phương thức khởi tạo của class GiamSatThuMuc các dòng lệnh sau:
public GiamSatThuMuc()
{
InitializeComponent();
if (!(System.Diagnostics.EventLog.SourceExists("GiamSatThuMuc_Source ")) )
{
System.Diagnostics.EventLog.CreateEventSource("GiamSatThuMuc_Source", "GiamSatThuMuc_Log");
}
GiamSatThuMucEventLog.Source = "GiamSatThuMuc_Source";
GiamSatThuMucEventLog.Log = "GiamSatThuMuc_Log";
}
Chú ý rằng bạn không nên đặt các dòng lệnh này ở phương thức OnStart, mặc dù việc bổ sung này khiến nó vẫn hoạt động. Lý do của việc bổ sung vào phương thức khởi tạo của class là để nó chỉ chạy một lần.
Bước 8:
Thêm mã chương trình vào các phương thức xử lý biến cố OnStart và OnStop. Để viết đoạn mã lệnh cho phương thức OnStart, bạn gõ vào đoạn mã như trình bày sau đây:
protected override void OnStart(string[] args)
{
FileSystemWatcher watch = new FileSystemWatcher();
watch.Path = @"c:\Watcher\";
watch.Changed += new FileSystemEventHandler(OnChanged);
watch.Created += new FileSystemEventHandler(OnChanged);
watch.Deleted += new FileSystemEventHandler(OnChanged);
watch.Renamed += new RenamedEventHandler(OnRenamed);
watch.EnableRaisingEvents = true;
watch.IncludeSubdirectories = true;
Console.ReadLine();
}
//--------------------------------------------------
private void OnChanged(object source, FileSystemEventArgs e)
{
// Specify what is done when a file is changed, created, or deleted.
string dir = @"c:\Watcher\" + e.Name;
if (e.FullPath == dir)
{
Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType);
GiamSatThuMucEventLog.WriteEntry("Da co thao tac Change trong thu muc Watcher tren C");
}
}
// ----------------------------------------------------------------------------------
private void OnRenamed(object source, RenamedEventArgs e)
{
// Specify what is done when a file is renamed.
string dir = @"c:\Watcher\" + e.Name;
if (e.FullPath == dir)
{
Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath);
GiamSatThuMucEventLog.WriteEntry("Da co thao tac rename trong thu muc Watcher tren C");
}
}
Đoạn mã lệnh trên nhằm mục tiêu khi service được start trình ứng dụng sẽ giám sát thư mục C:\Watcher. Bạn có thể bổ sung thêm theo ý mình, ở đây chúng ta chỉ viết mã lệnh tướng ứng với các sự kiện OnChanged và OnRenamed.
Chú ý: Trong phần mã lệnh của GiamSatThuMuc.Designer.cs bạn cần sửa biểu thị private àpublic tương ứng với khai báo GiamSatThuMucEventLog dòng lệnh sau:
public System.Diagnostics.EventLog GiamSatThuMucEventLog;
II Tạo ứng dụng loại Windows Service.
Bước 1:
Khởi động Visual Studio .NET và tạo một project mới với việc sử dụng mẫu Windows Service. Đặt tên cho project là wsGiamSatThuMuc và chứa nó vào một thư mục trên máy tính của bạn.
Bước 2:
Trên cửa sổ Solution Explorer đổi tên của component có tên Service1.cs thànhGiamSatThuMuc.cs.
Bước 3:
DoubleClick vào GiamSatThuMuc.cs à Properties window. Trên cửa sổ Properties lần lượt thực hiện các công việc sau:
· Tại mục ServiceName: đổi tên mặc định service1 là GiamSatThuMuc.
· Tại mục AutoLog : Thiết lập giá trị là False.
· Tại mục CanStop: Thiết lập giá trị là True.
Bước 4:
Click chọn hiển thị hộp công cụ (Toolbox) của Visual Studio .NET --> click tab : Components --> click chọn EventLog (Là một component) kéo thả vào cửa sổ design.
Bài viết này sẽ hướng dẫn các bạn viết một trình ứng dụng với mục tiêu âm thầm theo dõi giám sát một thư mục nào đó trên máy tính. Do trình ứng dụng thuộc loại Windows Service nên sau khi viết xong các bạn có thể cài đặt và vận hành nó giống như là một service
I. Tổng quan
Windows Services cung cấp phương tiện cho application logic chạy liên tục trên máy tính của bạn, thông thường là việc cung cấp điều khiển thiết bị hoặc các dịch vụ hệ điều hành.Windows Services là hữu dụng đối với các ứng dụng phía server mà ta muốn chúng phải luôn ở trạng thái sẵn sàng phục vụ các yêu cầu từ client. Nói chung, nếu bạn có nhu cầu xây dựng một trình ứng dụng mà bản chất hoạt động của nó mang tính “âm thầm làm việc” và không cần sự tương tác trực tiếp của người dùng, bạn có thể nghĩ ngay đến việc tạo trình ứng dụng loại Windows Service.
Windows Service là một ứng dụng chạy trên máy server hoặc workstation và cung cấp những chức năng mà sự diễn tiến của nó không cần sự tương tác trực tiếp của người dùng. Windows Services thường được dùng để giám sát hoạt động hệ thống.
Một Windows Service sẽ chạy trong tiến trình của riêng nó, không phụ thuộc người dùng hay các chương trình khác đang chạy trên cùng máy tính. Windows Services thường được cấu hình để tự động bắt đầu khi nào máy tính khởi động. Không giống như đa phần các ứng dụng, Windows Services chạy dưới nhận dạng bảo mật của chính nó, thay vì dưới nhận dạng của đăng nhập người dùng hiện hành. Chúng có thể bắt đầu chạy, ngay cả nếu không có người dùng (user) đăng nhập máy tính.
Khi mà bạn tạo một ứng dụng với mục tiêu ứng dụng này sẽ chạy như là một Windows Service, bạn cần phải lưu ý rằng nó không bao gồm bất kỳ các yếu tố giao tiếp người dùng như Message Boxes hay Dialog Boxes. Một Windows Service không có tính chất cung cấp một giao diện trực quan (visual interface) cho người dùng.
Thông thường một Windows Service sẽ báo cáo đặc thù các kết quả và thông báo lỗi của nó tới một sổ ghi biến cố (event log). Tuy nhiên bạn cũng có thể kết hợp nó với Web Service để làm những việc “động trời” hơn như là âm thầm chuyển thông tin từ máy mà nó đang được cài đặt đến một máy ở xa thông qua đường truyền internet.
Nếu như bạn đã quen thuộc với Microsoft SQL Server 2000, bạn sẽ nhận thấy nó chạy như là một Windows Service. Một ví dụ dễ hiểu của ứng dụng Windows Service là Windows Time Service, nó cập nhật thông tin đồng hồ mà bạn thấy trên thanh taskbar của máy tính. Trước đây, việc phát triển các ứng dụng dạng này là rất khó khăn. Giờ đây, nhờ có .NET Framework chứa một tập các class, cung cấp các chức năng cơ bản cho việc cài đặt và phát triển dễ dàng các ứng dụng Windows Service trên nền C# .NET .
Trong khi lập trình, chúng ta thường gặp phải rất nhiều trường hợp cần định dạng lại một chuỗi như chuỗi số, chuỗi ngày tháng sao cho đúng yêu cầu.
Ví dụ: định dạng ngày tháng: MM/dd/yyyy ta muốn chuyển sang dd/MM/yyyy cho thuần Việt.
Sau đâu là các kiểu chuyển đổi, định dạng chuỗi trong C#
Định dạng số chữ số sau dấu chấm trong số thập phân
String.Format("{0:0.00}", 123.4567); // "123.46"String.Format("{0:0.00}", 123.4); // "123.40"String.Format("{0:0.00}", 123.0); // "123.00"Định dạng số chữ số trước dấu chấm trong số thập phân
String.Format("{0:00.0}", 123.4567); // "123.5"String.Format("{0:00.0}", 23.4567); // "23.5"String.Format("{0:00.0}", 3.4567); // "03.5"String.Format("{0:00.0}", -3.4567); // "-03.5"Thêm dấu ngăn cách hàng nghìn
String.Format("{0:0,0.0}", 12345.67); // "12,345.7"String.Format("{0:0,0}", 12345.67); // "12,346"Thêm số 0 vào trước số
String.Format("{0:00000}", 15); // "00015"String.Format("{0:00000}", -15); // "-00015"Căn số sang phải hay trái dựa vào kích cỡ ta cung cấp
String.Format("{0,5}", 15); // " 15"String.Format("{0,-5}", 15); // "15 "String.Format("{0,5:000}", 15); // " 015"String.Format("{0,-5:000}", 15); // "015 "Định dạng ngày tháng
String.Format("{0:M/d/yyyy}", dt); // "3/9/2008"String.Format("{0:MM/dd/yyyy}", dt); // "03/09/2008"String.Format("{0:t}", dt); // "4:05 PM" ShortTimeString.Format("{0:d}", dt); // "3/9/2008" ShortDateString.Format("{0:T}", dt); // "4:05:07 PM" LongTimeString.Format("{0:D}", dt); // "Sunday, March 09, 2008" LongDateString.Format("{0:f}", dt); // "Sunday, March 09, 2008 4:05 PM" LongDate+ShortTimeString.Format("{0:F}", dt); // "Sunday, March 09, 2008 4:05:07 PM" FullDateTimeString.Format("{0:g}", dt); // "3/9/2008 4:05 PM" ShortDate+ShortTimeString.Format("{0:G}", dt); // "3/9/2008 4:05:07 PM" ShortDate+LongTimeString.Format("{0:m}", dt); // "March 09" MonthDayString.Format("{0:y}", dt); // "March, 2008" YearMonthString.Format("{0:r}", dt); // "Sun, 09 Mar 2008 16:05:07 GMT" RFC1123String.Format("{0:s}", dt); // "2008-03-09T16:05:07" SortableDateTimeHi vọng với những ví dụ trên, các bạn có thể định dạng các chuỗi hiển thị lên ứng dụng của mình một cách khoa học nhất.