Objectives: ü Hiểu về windows service và cấu trúc của windows service project ü Components của windows service và việc khai báo service bằng ngôn ngữ C# ü Class installer của service, cài đặt và gỡ bỏ windows service ü Màn hình(MMC) windows service và Handler error trong ứng dụng windows service ü Trong thực tế thường sử dụng windows service |
EXERCISES: Tạo mới Solution tên Exercise04Soln Exercise 01 : Thêm windows service mới vào Solution tên là BaseService · Đổi tên service1 thành OneService.cs · Mở OneService chế độ Design View | R-Click | Add Installer · Click trên serviceProcessInstaller1 | R-Click | Properties | Account chọn LocalSystem · Chọn ServiceInstaller | R-Click | Properties o Display Name: OneService o Description: OneService of Windows Service · Trở lại OneService Service trên Design View | Click on “Click here to switch to code view” và khai báo using System.IO; · Trong phương thức OnStart o Khai báo biến streamWriter kiểu dữ liệu StreamWriter o Tạo 1 file tên là OneService.txt trong folder Exercise04Soln o Khai báo code để ghi nội dung vào OneService.txt § Chuỗi "OneService has started" và ngày hiện hành khi ghi vào file private static void WriteMessageToFile(string message) { string path = @"D:\Application And Website\Lop Dai Han\C# Nang Cao\Exercise04Soln\OneService.txt"; StreamWriter streamWriter; if (!File.Exists(path)) { streamWriter = new StreamWriter(path); streamWriter.WriteLine(DateTime.Now.ToLongDateString() + message); streamWriter.Close(); } else { streamWriter = new StreamWriter(path, true); streamWriter.WriteLine(DateTime.Now.ToLongDateString() + message); streamWriter.Close(); } } protected override void OnStart(string[] args) { string message = "OneService has started"; WriteMessageToFile(message); } · Trong phương thức OnStop o Khai báo biến streamWriter kiểu dữ liệu StreamWriter o Thêm nội dung vào OneService.txt trong folder Exercise04Soln o Khai báo code để ghi nội dung vào OneService.txt § Chuỗi "OneService has started" và ngày hiện hành khi ghi vào file protected override void OnStop() { string message = "OneService has stopped"; WriteMessageToFile(message); } o Build windows service thành file Exe o Mở Visual Studio 2008 Command Promt o Cài đặt BasicService đến Services của windows bằng việc sử dụng tiện ích installutil(installutil /I tênservice.exe) Exercise 02 : Tiếp tục với BaseService project o Mở service trong window xem OneService đã được đăng ký vào chưa ? o Chọn OneService và Start o Mở file OneService.txt trong folder Exercise04Soln, kiểm tra có chuỗi “OneService has started" và ngày hiện hành o Chọn OneService và Stop o Mở file OneService.txt trong folder Exercise04Soln, kiểm tra có chuỗi "OneService has stop" và ngày hiện hành Exercise 03 : Tiếp tục với BaseService project · Mở Visual Studio 2008 Command Promt · Gỡ bỏ BasicService đến Services của windows bằng việc sử dụng tiện ích uninstallutil(installutil /u tênservice.exe) · Mở service trong window xem OneService đã được gỡ bỏ chưa ? Exercise 04 : Thêm mới window Application tên ServiceMonitor · Đổi tên Form1 thành ServiceMonitoring.cs · Thêm ListView vào Form1 tên lvServices · Thêm Button vào Form1 tên btnShow · Chuyển qua chế độ code behind o Add reference System.ServiceProcess · Trong sự kiện Click của btnShow o Khai báo mảng ServiceController và lấy ra mảng Service từ phương thức GetService của class ServiceController o Sử dụng foreach để hiển thị thông tin(ServiceName,Status) của mỗi service lên lvService ServiceController[] arrayServiceController; private void btnShow_Click(object sender, EventArgs e) { ShowServices(); } private void ShowServices() { DataTable dataTable = new DataTable(); dataTable.Columns.Add("Name"); dataTable.Columns.Add("Status"); DataRow dataRow; arrayServiceController = ServiceController.GetServices(); foreach (ServiceController item in arrayServiceController) { dataRow = dataTable.NewRow(); dataRow["Name"] = item.ServiceName; dataRow["Status"] = item.Status; dataTable.Rows.Add(dataRow); } ListViewItem listViewItem = new ListViewItem(); lvServices.Items.Clear(); for (int i = 0; i < dataTable.Rows.Count; i++) { listViewItem = lvServices.Items.Add(dataTable.Rows[i][0].ToString()); listViewItem.SubItems.Add(dataTable.Rows[i][1].ToString()); } Exercise 05 : Thêm mới window service tên AdvancedService · Đổi tên service1 thành FolderMonitorService.cs · Mở FolderMonitorService chế độ Design View · R-Click | Properties o Thay đổi lại CanShutDown : True o Thay đổi lại CanPauseAndContinue : True · R-Click | Add Installer · Click trên serviceProcessInstaller1 | R-Click | Properties | Account chọn LocalSystem · Chọn serviceInstaller1 | R-Click | Properties o Display Name: Folder Monitor Service o Description: Service of Advanced Windows Service · Trở lại FolderMonitorService Service trên Design View | Click on “Click here to switch to code view” và khai báo usingSystem.IO; · Trong phương thức OnStart o Khai báo biến fileSystemWatcher kiểu dữ liệu FileSystemWatcher o Gán thuộc tính EnableRaisingEvents của fileSystemWatcher là true o Khai báo Created Handler cho đối tượng fileSystemWatcher và chỉ đến 1 method protected override void OnStart(string[] args) { FileSystemWatcher fileSystemWatcher = new FileSystemWatcher(@"D:\Application And Website\Lop Dai Han\C# Nang Cao\Exercise04Soln"); fileSystemWatcher.EnableRaisingEvents = true; fileSystemWatcher.Created += new FileSystemEventHandler(fileSystemWatcher_Created); fileSystemWatcher.Deleted += new FileSystemEventHandler(fileSystemWatcher_Deleted); } § Trong phương thức Created · Khai báo biến streamWriter kiểu dữ liệu StreamWriter · Tạo 1 file tên là Created.txt trong folder Exercise04Soln · Khai báo code để ghi nội dung vào Created.txt với chuỗi “File has created” và thời gian tạo file void fileSystemWatcher_Deleted(object sender, FileSystemEventArgs e) { using (StreamWriter streamWrite = new StreamWriter(@"D:\Application And Website\Lop Dai Han\C# Nang Cao\Exercise04Soln\DeletedFile.txt")) { streamWrite.WriteLine(string.Format("File has deleted :{0}", DateTime.Now.ToString())); } } o Khai báo Deleted Handler cho đối tượng fileSystemWatcher và chỉ đến 1 method § Trong phương thức Deleted · Khai báo biến streamWriter kiểu dữ liệu StreamWriter · Tạo 1 file tên là Deleted.txt trong folder Exercise04Soln · Khai báo code để ghi nội dung vào Created.txt với chuỗi “File has deleted” và thời gian xóa file void fileSystemWatcher_Created(object sender, FileSystemEventArgs e) { using (StreamWriter streamWrite=new StreamWriter(@"D:\Application And Website\Lop Dai Han\C# Nang Cao\Exercise04Soln\CreatedFile.txt")) { streamWrite.WriteLine(string.Format("File has created :{0}",DateTime.Now.ToString())); } } · Build window service thành file Exe · Mở Visual Studio 2008 Command Promt · Cài đặt AdvancedService đến Services của windows bằng việc sử dụng tiện ích installutil(installutil /I tênservice.exe) Exercise 06 : Tiếp tục với AdvancedService project · Mở Visual Studio 2008 Command Promt · Gỡ bỏ AdvancedService đến Services của windows bằng việc sử dụng tiện ích uninstallutil(installutil /u tênservice.exe) · Mở service trong window xem Folder Monitor Service đã được gỡ bỏ chưa ? Exercise 07 : Tiếp tục với AdvancedService project · Thêm mới windows service thành SqlServerService.cs · Mở SqlServerService chế độ Design View · R-Click | Add Installer · Chọn serviceInstaller2 | R-Click | Properties o Display Name: SQL Server Monitor Service o Description: Service of Advanced Windows Service · Trở lại SqlServerService Service trên Design View | Click on “Click here to switch to code view” và khai báo usingSystem.Data.SqlClient; · Trong phương thức OnStart o Khai báo tạo mới Table tên quochung trong database của bạn protected override void OnStart(string[] args) { string commandText = "create table quochung(maso int primary key not null)"; SqlConnection sqlConnection = new SqlConnection("server=(local);database=StudentManagementForProfessional;integrated security=true"); sqlConnection.Open(); SqlCommand sqlCommand = new SqlCommand(commandText, sqlConnection); sqlCommand.ExecuteNonQuery(); } · Trong phương thức OnStop o Khai báo xóa Table tên quochung trong database của bạn · Build window service thành file Exe · Cài đặt AdvancedService đến Services của windows bằng việc sử dụng tiện ích installutil(installutil /I tênservice.exe) · Vào service Start SQL Server Monitor Service và kiểm tra quochung được tạo trong database chưa · Stop SQL Server Monitor Service và kiểm tra quochung được xóa trong database chưa Exercise 08 : Tiếp tục với ServiceMonitor project · Thêm 1 button vào Form tên là btnStart (Text là Start) · Khai báo code trong sự kiện Click của nút btnStart o Lấy service được chọn trên lvService o Khai báo khởi tạo service này sử dụng ServiceController o Khai báo Try Catch và ghi lỗi vào Event Log · Click Start để khởi động Service nếu nó Stopped · Khởi động Service nếu nó Start và kiểm tra lỗi trong EventViewer |