Xây dựng Windows Service với C# – Phần 3

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

lap trinh C#

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.

lap trinh C#

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ố OnStartOnStop. Để 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 OnChangedOnRenamed.

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; 

Không có nhận xét nào: