Đề tài Xây dựng ứng dụng dưới dạng dịch vụ chạy trên Windows Server 2003 domain controller để shutdown các máy trong doamin theo thời gian định trước

Tài liệu Đề tài Xây dựng ứng dụng dưới dạng dịch vụ chạy trên Windows Server 2003 domain controller để shutdown các máy trong doamin theo thời gian định trước: KH OA C NT T – Đ H KH TN TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN KHOA CÔNG NGHỆ THÔNG TIN BỘ MÔN MẠNG MÁY TÍNH & VIỄN THÔNG NGUYỄN QUỐC HÙNG 0012043 TRẦN THỊ HOÀI THANH 0012657 XÂY DỰNG ỨNG DỤNG DẠNG DỊCH VỤ CHẠY TRÊN WINDOWS SERVER 2003 DOMAIN CONTROLLER ĐỂ SHUTDOWN CÁC MÁY TRONG DOMAIN THEO THỜI GIAN ĐỊNH TRƯỚC LUẬN VĂN CỬ NHÂN TIN HỌC NGƯỜI HƯỚNG DẪN: THẦY NGUYỄN MINH TUẤN NIÊN KHÓA 2000-2004 KH OA C NT T – Đ H KH TN LỜI CẢM ƠN Để thực hiện và hoàn thành tốt bài luận văn tốt nghiệp này, chúng em đã nhận được sự giúp đỡ và hướng dẫn rất tận tình của các thầy cô và các bạn thuộc khoa Công Nghệ Thông Tin trường Đại học Khoa Học tự Nhiên TP.Hồ Chí Minh. Chúng em xin cảm ơn các thầy cô thuộc khoa Công Nghệ Thông Tin đã cung cấp cho chúng em các kiến thức vô cùng quý báu và cần thiết trong suốt thời gian học tập tại trường để chúng em có thể thực hiện và hoàn thành bài luận văn tốt nghiệp này. Đặc biệt, chúng em chân thành cảm...

pdf64 trang | Chia sẻ: hunglv | Lượt xem: 1204 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Đề tài Xây dựng ứng dụng dưới dạng dịch vụ chạy trên Windows Server 2003 domain controller để shutdown các máy trong doamin theo thời gian định trước, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
KH OA C NT T – Đ H KH TN TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN KHOA CÔNG NGHỆ THÔNG TIN BỘ MÔN MẠNG MÁY TÍNH & VIỄN THÔNG NGUYỄN QUỐC HÙNG 0012043 TRẦN THỊ HOÀI THANH 0012657 XÂY DỰNG ỨNG DỤNG DẠNG DỊCH VỤ CHẠY TRÊN WINDOWS SERVER 2003 DOMAIN CONTROLLER ĐỂ SHUTDOWN CÁC MÁY TRONG DOMAIN THEO THỜI GIAN ĐỊNH TRƯỚC LUẬN VĂN CỬ NHÂN TIN HỌC NGƯỜI HƯỚNG DẪN: THẦY NGUYỄN MINH TUẤN NIÊN KHÓA 2000-2004 KH OA C NT T – Đ H KH TN LỜI CẢM ƠN Để thực hiện và hoàn thành tốt bài luận văn tốt nghiệp này, chúng em đã nhận được sự giúp đỡ và hướng dẫn rất tận tình của các thầy cô và các bạn thuộc khoa Công Nghệ Thông Tin trường Đại học Khoa Học tự Nhiên TP.Hồ Chí Minh. Chúng em xin cảm ơn các thầy cô thuộc khoa Công Nghệ Thông Tin đã cung cấp cho chúng em các kiến thức vô cùng quý báu và cần thiết trong suốt thời gian học tập tại trường để chúng em có thể thực hiện và hoàn thành bài luận văn tốt nghiệp này. Đặc biệt, chúng em chân thành cảm ơn thầy Nguyễn Minh Tuấn đã tận tình hướng dẫn và giúp đỡ chúng em trong suốt thời gian thực hiện đề tài. Cuối cùng, chúng em xin cảm ơn gia đình cùng bạn bè đã tạo điều kiện, động viên và giúp đỡ để chúng em đủ tự tin và nghị lực để thực hiện tốt đề tài. Do giới hạn về mặt thời gian và kiến thức nên đề tài chắc chắn sẽ không tránh khỏi những sai sót ngoài ý muốn. Chúng em rất mong nhận được sự thông cảm và đóng góp ý kiến của quý thầy cô và các bạn. Trân trọng kính chào. Sinh viên thực hiện Nguyễn Quốc Hùng Trần Thị Hoài Thanh KH OA C NT T – Đ H KH TN Mục lục MỤC LỤC Trang Phần 1: Mở Đầu Chương 1: Đặt vấn đề và giới thiệu đề tài ............................................................. 1 1.1. Giới thiệu đề tài................................................................................... 1 2.1. Các chương trình đã có........................................................................ 2 Phần 2: Cơ sở lý thuyết Chương 2: Tìm hiểu một số khái niệm liên quan đến đề tài................................... 4 2.1. Domain Controller ............................................................................... 4 2.2. Domain ................................................................................................ 5 2.3. Active Directory .................................................................................. 6 2.3.1. Active Directory là gì? ............................................................ 6 2.3.2. Lợi ích của Active Directory................................................... 6 2.4. Windows Server 2003 .......................................................................... 7 Chương 3: Tìm hiểu ứng dụng dạng dịch vụ ......................................................... 9 3.1. Tổng quan và các đặc điểm của ứng dụng dạng dịch vụ ....................... 9 3.2. Cơ chế hoạt động của các ứng dụng dạng dịch vụ .............................. 10 3.3. Tài khoản dịch vụ và mật mã tài khoản dịch vụ.................................. 11 3.4. Cách tạo một ứng dụng dịch vụ trong .NET Framework .................... 12 3.4.1. Các lớp chính trong việc tạo dịch vụ. .................................... 12 3.4.2. Tạo một ứng dụng dịch vụ đơn giản...................................... 14 3.5. Sự khác nhau giữa các ứng dụng dịch vụ và các ứng dụng .NET Framework khác. ................................................................................................ 21 Chương 4: Tìm hiểu về WMI (Windows Management Instrument)..................... 23 4.1. Tổng quan về WMI............................................................................ 23 4.1.1. Khái niệm script và ngôn ngữ viết script ............................... 23 4.1.2. Tổng quan về WMI............................................................... 23 4.2. Kiến trúc WMI................................................................................... 25 KH OA C NT T – Đ H KH TN Mục lục 4.2.1. Các tài nguyên được quản lý ................................................. 26 4.2.2. Cơ sở hạ tầng WMI............................................................... 26 4.2.2.1. Thư viện viết script WMI.......................................... 26 4.2.2.2. Kho lưu trữ CIM....................................................... 27 4.2.2.3. CIMOM.................................................................... 28 4.2.2.4. Các Provider ............................................................. 29 4.2.3. Phần tiêu thụ ......................................................................... 30 4.3. Ví dụ ứng dụng WMI đơn giản .......................................................... 30 4.4. Tìm hiểu Win32 Provider................................................................... 32 4.4.1. Các lớp mà Win32 Provider hỗ trợ........................................ 32 4.4.2. Lớp Win32_OperatingSystem............................................... 34 Chương 5: Tìm hiểu System.DirectoryServices................................................... 35 5.1. Tổng quan System.DirectoryServices................................................. 35 5.2. Cách sử dụng System.DirectoryServices ............................................ 36 5.2.1. Đưa System.DirectoryServices vào ứng dụng ....................... 36 5.2.2. Liên kết và sử dụng các đối tượng danh bạ............................ 37 5.2.2.1. Các đối tượng danh bạ .............................................. 37 5.2.2.2. Liên kết đến các đối tượng danh bạ........................... 38 Phần 3: Thiết kế và cài đặt ứng dụng. Chương 6: Ứng dụng và các chức năng của ứng dụng......................................... 41 6.1. Giới thiệu chương trình ...................................................................... 41 6.2. Các lớp chính của chương trình.......................................................... 41 6.3. Lưu đồ họat động chính của ứng dụng ............................................... 42 6.4. Cách cài đặt và sử dụng ứng dụng...................................................... 44 Phần 4: Kết luận Chương 7: Kết luận - Đánh giá - Hướng phát triển.............................................. 54 7.1. Kết luận và đánh giá .......................................................................... 54 7.2. Hướng phát triển ................................................................................ 56 Tài liệu tham khảo .............................................................................................. 57 KH OA C NT T – Đ H KH TN Bảng hình vẽ và các chữ viết tắt BẢNG HÌNH VẼ VÀ CÁC CHỮ VIẾT TẮT Hình vẽ Trang Hình 3.1 ................................................................................................... 18 Hình 3.2 .................................................................................................. 19 Hình 3.3 ................................................................................................... 20 Hình 4.1 ................................................................................................... 25 Hình 4.2 .................................................................................................. 31 Hình 5.1 ................................................................................................... 36 Hình 5.2 ................................................................................................... 37 Hình 5.3 .................................................................................................. 38 Hình 6.1 ................................................................................................... 43 Hình 6.2 ................................................................................................... 44 Hình 6.3 ................................................................................................... 45 Hình 6.4 ................................................................................................... 46 Hình 6.5 ................................................................................................... 46 Hình 6.6 ................................................................................................... 47 Hình 6.7 ................................................................................................... 47 Hình 6.8 ................................................................................................... 48 Hình 6.9 ................................................................................................... 49 Hình 6.10 ................................................................................................. 51 Hình 6.11 ................................................................................................. 53 Chữ viết tắt WS2K3 : Windows Server 2003 Win2K : Windows 2000 DC : Domain Controller PDC : Primary Domain Controller BDC : Backup Domain Controller SCM : Service Controll Manager WMI : Windows management Instrument CIM : Common Information Model CIMOM : Common Information Model Object Manager KH OA C NT T – Đ H KH TN Tóm tắt luận văn TÓM TẮT LUẬN VĂN Chương 1: Đặt vấn đề và giới thiệu đề tài. Nêu lí do chọn, mục đích của đề tài. Phân tích, đánh giá các chương trình đã có của các tác giả trong và ngoài nước có liên quan đến đề tài. Mục tiêu chính mà đề tài tập trung nghiên cứu giải quyết. Chương 2: Giới thiệu một số khái niệm liên quan, cần thiết cho đề tài như: domain, domain controller, dịch vụ danh bạ, Active Directory,…. Chương 3: Tìm hiểu về ứng dụng dạng dịch vụ: thế nào là một ứng dụng dạng dịch vụ? Các đặc điểm chính của nó là gì? Cơ chế hoạt động của dịch vụ như thế nào?. Và cũng trong phần này chúng ta sẽ xem cách tạo một ứng dụng dạng dịch vụ trong .NET Framework, từ đó rút ra sự khác nhau giữa các ứng dụng dịch vụ và các ứng dụng .NET Framework khác. Chương 4: Làm quen với WMI (Windows management Instrument), một kỹ thuật cho phép quản lý, tương tác với các thành phần cốt lõi bên trong hệ điều hành Windows. Nắm được kiến trúc của WMI và cách sử dụng WMI trong ứng dụng như thế nào. Cũng trong chương 4, các bạn sẽ được làm quen với lớp Win32_OperatingSystem cùng với phương thức Win32_Shutdown được dùng để gọi shutdown Windows. Chương 5: Tìm hiểu về System.DirectoryServices, một namespace trong .NET Framework cho phép truy cập đến ActiveDirectory thông qua kỹ thuật .NET để lấy về các thông tin mong muốn. Tại đây bạn sẽ được xem các ví dụ rất cụ thể, đặc biệt là cách truy cập vào ActiveDirectory để lấy về các máy tính thuộc cùng domain. KH OA C NT T – Đ H KH TN Tóm tắt luận văn Chương 6: Giới thiệu về ứng dụng và chức năng của ứng dụng, lưu đồ họat động, các lớp chính và cách thức chính đã được sử dụng để viết ứng dụng. Hướng dẫn cài đặt và sử dụng ứng dụng. Chương 7: Kết luận, tự đánh giá và hướng phát triển của ứng dụng. KH OA C NT T – Đ H KH TN Chương 1: Đặt vấn đề và giới thiệu đề tài 1 Phần 1: Mở Đầu Chương 1: Đặt vấn đề và giới thiệu đề tài 1.1. Giới thiệu đề tài Ngày nay, để cùng hòa vào xu thế phát triển công nghệ thông tin của thế giới, bộ mặt công nghệ thông tin của Việt Nam đang có những bước phát triển thật đáng mừng. Người người dùng máy tính, nhà nhà dùng máy tính, các tổ chức, công ty cũng đang bước từng bước tin học hóa dần hệ thống làm việc của mình, các trường học, trung tâm tin học cũng đã, đang mọc lên ngày càng đông đúc,… kéo theo đó là hàng loạt hệ thống mạng máy tính nhỏ có, vừa có, lớn có cũng ra đời. Và các lợi ích do mạng máy tính đem lại thì có lẽ chúng ta không cần bàn thêm nữa bởi vì cả các bạn, cả chúng tôi đều đã ít nhất một lần thấy được những lợi ích do mạng máy tính đem lại cho chúng ta. Có mạng máy tính tức là chắc chắn sẽ có người quản trị mạng, những người chịu trách nhiệm chăm sóc, theo dõi, hồi phục,… “sức khỏe” cho mạng. Vậy mà bạn có tưởng tượng được không, một công việc mang tính chất “nhàm chán” lặp đi lặp lại hàng ngày lại được xem mặc nhiên là công việc của các quản trị viên. Công việc mà chúng tôi đề cập đến ở đây không gì khác hơn là: việc kiểm tra và thực hiện shutdown các máy trạm còn sót lại, hay có khi là phải shutdown tất cả các máy này vào cuối mỗi ngày làm việc. Đồng ý là Microsoft đã hỗ trợ cho chúng ta một cách làm ít tốn công hơn trên Windows nhưng thật sự thì tuy rằng ngồi một chỗ nhưng người quản trị vẫn phải thực hiện thao tác mở, nhập, nhắp, chọn,… hàng ngày hàng ngày và hàng ngày. Chính vì lý do này nên chúng tôi đã chọn đề tài: “xây dựng ứng dụng dưới dạng dịch vụ chạy trên Windows Server 2003 domain controller để shutdown các máy trong domain theo thời gian định trước” để làm bài luận tốt nghiệp cho mình. Không chỉ giúp ích được cho các tổ chức, các người quản trị mạng có nhu cầu quản lý các máy trong domain của mình mà nhu cầu của các cá nhân cho các máy tính đơn cũng không kém phần cần thiết. Bạn đi vắng? bạn hay ngủ quên khi nghe nhạc? KH OA C NT T – Đ H KH TN Chương 1: Đặt vấn đề và giới thiệu đề tài 2 bạn cần đi học hay đi làm việc quan trọng vào một số ngày nhất định nhưng lại hay quên vì mải say sưa cùng chiếc máy vi tính. Bạn chỉ cần hẹn giờ, máy sẽ shutdown giúp bạn, bạn có thể đi, có thể ngủ,… bất kì lúc nào mà không cần phải quan tâm nhiều đến việc mình đã tắt máy hay chưa. Chúng tôi sẽ giúp bạn làm điều đó! 1.2. Các chương trình đã có Hiện tại đã có một số chương trình hẹn giờ tự động tắt máy trên thị trường phần mềm Việt Nam, nhưng đa số các chương trình này có giao diện bằng tiếng nước Ngoài (tiếng Anh) làm cho một số người mới làm quen với máy tính sẽ gặp không ít khó khăn khi sử dụng. Và, một điều cũng không kém phần quan trọng nữa đó là phần lớn các phần mềm này đòi hỏi phải có bản quyền, tức là phải có mua mới được sử dụng. Nhưng với mức sống trung bình của người dân Việt Nam hiện nay thì chi phí để chi trả cho vấn đề bản quyền này cũng là một vấn đề không nhỏ. Ngoài ra, hệ điều hành Microsoft Windows cũng cung cấp cho người sử dụng một công cụ dòng lệnh để thực hiện việc tắt máy. Muốn sử dụng bạn chỉ cần đánh lệnh shutdown và kèm theo các tham số cho phù hợp với yêu cầu. Ví dụ: shutdown /i : để hiển thị giao diện đồ họa giúp người dùng dễ dàng chọn máy cũng như hành động muốn thực hiện. shutdown /s : để shutdown máy cục bộ. shutdown /s/m \\may1 : để shutdown máy ở xa có tên là “may1”,…. Nhìn chung thì công cụ này đã thực hiện tốt việc tắt máy cục bộ hay ở xa. Nhưng nó vẫn còn một số hạn chế là không thể đặt được giờ hẹn cũng như giờ hẹn lặp, tức là mỗi lần muốn tắt máy cục bộ hay máy từ xa, bạn đều phải thao tác bằng tay. Còn về các chương trình hẹn giờ tự động tắt máy do chính người Việt viết thì sau một thời gian tìm hiểu chúng tôi nhận thấy rằng: không có nhiều chương trình cho vấn đề này, nổi bật nhất là chương trình ShutdownAlarm. _ Ưu điểm của ShutdownAlarm: + Giải quyết được tương đối yêu cầu đặt ra là hẹn giờ để tắt máy. KH OA C NT T – Đ H KH TN Chương 1: Đặt vấn đề và giới thiệu đề tài 3 + Miễn phí. + Mã nguồn mở. _ Khuyết điểm của ShutdownAlarm: + Chỉ cho hẹn vào một thời điểm trong một ngày, tức là chúng ta không thể hẹn giờ vào các ngày lặp lại. Ví dụ như mỗi ngày, mỗi thứ hay các thứ trong tuần,..v…v.. + Chỉ có thể hẹn giờ tắt máy cho máy cục bộ. Do đó, trong đề tài này chúng tôi luôn cố gắng tập trung vào giải quyết các yêu cầu chính mà chương trình cần có là: _ Chạy được trên Windows 2003 server. _ Shutdown được các máy trong cùng domain. _ Đặt được thời gian shutdown linh hoạt hơn. _ Có thể gọi chương trình bất cứ lúc nào, tại bất cứ máy nào (work-station hay domain controller server) bằng phương tiện Remote Deskstop Connection. KH OA C NT T – Đ H KH TN Chương 2: Tìm hiểu một số khái niệm liên quan đến đề tài 4 Phần 2: Cơ sở lý thuyết Chương 2: Tìm hiểu một số khái niệm liên quan đến đề tài 2.1. Domain Controller Như chúng ta đã biết: nối mạng là tất cả những gì về chia sẻ dùng chung, nhưng không phải vì vậy mà có thể “mở cửa” cho bất kì ai vào ra một cách tự do mà người quản trị phải tạo ra các tài khoản người dùng và lưu trữ chúng ở một file nào đó để xác minh và bảo đảm đúng quyền hạn truy cập của người dùng. Ở dạng đơn giản nhất, các tài khoản người dùng bao gồm một cơ sở dữ liệu các tên người dùng và mật khẩu. NT 4 lưu trữ thông tin người dùng trong một tập tin tên là SAM nhưng Windows 2000 (Win2K) và Windows Server 2003 (WinS2K3) lưu trữ trong một tập tin tên là NTDS.DIT. Dữ liệu trong NTDS.DIT được mã hóa phức tạp hơn trong SAM để đảm bảo cho cơ sở dữ liệu an toàn hơn. Nếu mạng của bạn có một server thì tập tin chứa các tài khoản người dùng sẽ được lưu trữ ở đó, thế nhưng nếu mạng của bạn gồm nhiều server. Hầu hết các công ty lớn đều phải xây dựng nhiều server và số server lên đến hàng chục hoặc hàng trăm cũng không phải là hiếm (xét trên bình diện thế giới). Có phải chúng ta sẽ lưu trữ mỗi bản sao hoàn chỉnh của NTDS.DIT trên mỗi server?. Thực tế thì: ● Thứ nhất: kích thước của NTDS.DIT có thể hơi bị lớn do đó chúng ta sẽ phải tốn khá nhiều bộ nhớ để lưu trữ file này trong tất cả các server. ● Thứ hai: nếu các server được nối kết bởi những đường tốc độ chậm thì quá trình cập nhật NTDS.DIT đến tất cả các server trên mạng sẽ có thể chiếm dụng nhiều thời gian và dung lượng đường truyền. ● Thứ ba: chúng ta có thực sự cần phải tạo ra một “trận bão” sao chép tập tin giữa các server trên mạng mỗi khi ai đó chỉ đơn giản là thay đổi mật khẩu của họ chăng? KH OA C NT T – Đ H KH TN Chương 2: Tìm hiểu một số khái niệm liên quan đến đề tài 5 ● Thứ tư: nếu chúng ta sao chép NTDS.DIT đến từng server một trong mạng, rất có thể là có một vài server trong số đó bị hớ hênh, không được bảo vệ về mặt vật lý. Như thế sẽ rất dễ dàng cho việc đánh cắp NTDS.DIT từ các máy đó. Do đó, NTDS.DIT sẽ được đặt trên một nhóm nhỏ các server và các server này sẽ đóng vai trò của logon server, đảm trách việc xác minh cho những server còn lại. Những server này thường được gọi là domain controller. Domain controller (DC) là một server chứng thực cho việc logon vào domain, duy trì chính sách bảo mật và cơ sở dữ liệu của các tài khoản người dùng trong domain. Hay nói một cách đơn giản hơn là: domain controller (DC) sẽ làm các công việc như: kiểm tra sự hợp lệ của username và password, kiểm tra xem client này có phải là thành viên trong domain của mình hay không, cập nhật thông tin cho nhau,… Có hai lọai domain controller (DC): ● Primary domain controller (PDC): Trên một domain chỉ có một primary domain controller duy nhất. Primary domain controller sẽ là DC đầu tiên nhất được tạo ra và nó là “nhà kho” chính cho dữ liệu của domain. ● Backup domain controller (BDC): Trái lại với primary DC, trên một domain có thể tồn tại nhiều backup DC. Backup DC Ngoài chức năng chính như tên gọi của nó là backup dữ liệu từ primary DC thì backup DC cũng có thể chứng thực thông tin logon của user và có thể được nâng cấp lên như primary DC khi cần thiết. 2.2. Domain Domain là tập hợp những máy dùng chung cùng một danh sách các tài khoản người dùng, tức cùng một NTDS.DIT. Các máy này cùng chia sẻ một cơ sở dữ liệu danh bạ chung (common directory database). Cho nên, các máy trạm, các server, các domain controller đều là những thành viên của cùng một domain. Mỗi domain có một tên duy nhất và có các chính sách bảo mật cũng như các mối liên hệ bảo mật với các domain khác của chính nó. KH OA C NT T – Đ H KH TN Chương 2: Tìm hiểu một số khái niệm liên quan đến đề tài 6 2.3. Active Directory 2.3.1 Active Directory là gì? Dịch vụ danh bạ (directory service) là một “kho lưu trữ” có cấu trúc các thông tin về người cũng như các tài nguyên trong một tổ chức. Dịch vụ danh bạ (directory service) bao gồm cả nguồn thông tin danh bạ và dịch vụ làm cho các thông tin này có giá trị và có thể dùng được. Dịch vụ danh bạ có thể tìm kiếm một đối tượng cho người sử dụng ngay cả khi chỉ được cung cấp một thuộc tính bất kì trong tất cả các thuộc tính của đối tượng đó. Trong mạng WS2K3, dịch vụ danh bạ là Active Directory. Active Directory là một dịch vụ danh bạ (directory service) lưu trữ thông tin về các đối tượng trong mạng như các tài khoản người dùng, các máy tính,…. và làm cho các thông tin này có giá trị đối với người dùng và các người quản trị mạng. Nó cung cấp cho các người quản trị mạng một cái nhìn trực quan, có cấp bậc về mạng, đơn giản hóa công việc quản trị các đối tượng mạng. Khi bạn cài đặt Active Directory lên máy tính đang chạy WS2K3, máy tính đó sẽ trở thành domain controller cho một domain. 2.3.2. Các lợi ích của Active Directory Active Directory có các khả năng sau: ● Cho phép người dùng và các ứng dụng truy cập thông tin về các đối tượng. Thông tin này được lưu trữ dưới dạng các thuộc tính của đối tượng. Bạn có thể tìm kiếm đối tượng dựa trên bất kì thuộc tính nào của nó. ● Làm cho các giao thức và topology mạng vật lý trong suốt. Tức là, người dùng trên mạng có thể truy cập bất kì tài nguyên nào (VD:máy in) mà không cần biết tài nguyên này ở đâu và nó được kết nối vật lý đến mạng như thế nào. ● Cho phép lưu trữ một số lượng rất lớn các đối tượng. Active Directory có thể mở rộng khi tổ chức của bạn phát triển. Ví dụ, một danh bạ (directory) có thể mở rộng từ một server đơn với vài trăm đối tượng thành hàng ngàn server với hàng triệu đối tượng. KH OA C NT T – Đ H KH TN Chương 2: Tìm hiểu một số khái niệm liên quan đến đề tài 7 ● Có thể lập trình dễ dàng. Active Directory có thể được truy cập và quản trị một cách tự động bằng cách sử dụng Active Directory Service Interfaces (ADSI) API, Lightweight Directory Access Protocol (LDAP) API hay System.DirectoryServices namespace. Và còn rất nhiều lợi ích mà chúng ta có thể tìm thấy được ở Active Direcory, đặc biệt là với WS2K3, sau khi đã được Microsoft phát triển và bổ sung thêm nhiều tính năng mới từ Win2K. Nhưng trong phạm vi phần này chúng tôi không đề cập nhiều đến vấn đề này, để tìm hiểu thêm bạn có thể xem thêm tại Webside: www.microsoft.com. 2.4. Windows Server 2003 Như tất cả chúng ta đều đã biết, trên thị trường phần mềm hiện nay có rất nhiều hệ điều hành, bao gồm Unix, Linux, Novell Netware, MVS của IBM, VMS của Compaq,… Nhưng thật sự chỉ có một hệ điều hành đang chiếm lĩnh thị trường, đó chính là Microsoft Windows. Theo bộ số liệu thống kê mới nhất thì 43% server trên thế giới sử dụng Microsoft Windows, hàng trăm triệu người đã biết và quá quen thuộc với cách làm việc trên Windows. Và thực tế một lần nữa, Windows lại tiếp tục khẳng định lại vị trí của mình với phiên bản mới nhất Windows Server 2003 (WS2K3). Với WS2K3, chúng ta có bốn phiên bản chủ lực là: ● Windows Server 2003, Web Edition: được thiết kế riêng cho các máy chủ web. Mặc dù các máy chạy Windows Server 2003, Web Edition có thể là thành viên của một domain nhưng bạn không thể chạy Active Directory trên Windows Server 2003, Web Edition. ● Windows Server 2003, Standard Edition: sử dụng cho các doanh nghiệp nhỏ, các nhóm làm việc để làm domain controller hay làm máy chủ. ● Windows Server 2003, Enterprise Edition: sử dụng trong các tổ chức vừa và lớn để làm các máy chủ ứng dụng, các domain controller,…. Đây là phiên bản được phát triển từ Windows 2000 Advanced Server. KH OA C NT T – Đ H KH TN Chương 2: Tìm hiểu một số khái niệm liên quan đến đề tài 8 ● Windows Server 2003, Datacenter Edition: cho các cơ sở dữ liệu lớn nhất, các ứng dụng doanh nghiệp quy mô nhất. Datacenter Edition có thể cho phép bạn thực hiện được kiểu quản trị hệ thống mà nhiều năm trước đây người ta làm được trên máy mainframe. Với bốn ấn bản chuyên dụng cho các mục đích, quy mô và chi phí khác nhau nên người sử dụng sẽ linh hoạt hơn trong việc lựa chọn phiên bản phù hợp với mình nhất. Trong phạm vi đề cập dĩ nhiên là chúng ta sẽ không xét đến hai phiên bản Web Edition và Datacenter Edition. Có rất nhiều điều để nói về WS2K3, các điểm cải tiến, các chức năng cũng như các hỗ trợ mới. Nhưng trong phần này chúng tôi chỉ giới thiệu sơ lược về hệ điều hành WS2K3 thôi, do đó chúng ta sẽ không tìm hiểu sâu về bản chất WS2K3. Nhưng chúng tôi cũng muốn các bạn biết rằng WS2K3 quả thật là một hệ điều hành với nhiều mới mẻ và thú vị. Chẳng hạn như, với WS2K3 bạn có thể thực hiện được khoảng 98% công việc quản trị bằng dòng lệnh, bạn có thể đặt số người trong một nhóm làm việc là tùy ý (ở Win2K, bạn không thể đặt nhiều hơn 5.000 người trong một nhóm), bạn có thể chạy các chương trình .NET một cách thoải mái bởi vì WS2K3 đã được tích hợp .NET Framework, bạn có thể ..v..v.. Và còn một điểm mới mẻ nữa mà chúng ta không thể không nhắc đến đó là: WS2K3 là hệ điều hành cho máy chủ 64-bit lần đầu tiên từ Microsoft. Với một hệ điều hành 64-bit, đặc biệt là trên máy chủ, các ứng dụng của bạn sẽ thi hành các yêu cầu một cách nhanh chóng, dễ dàng và đáng tin cậy hơn. Từ đó kéo theo một loạt các lợi ích khác cho các doanh nghiệp, công ty, tổ chức có quy mô lớn và rất lớn. KH OA C NT T – Đ H KH TN Chương 3: Tìm hiểu ứng dụng dạng dịch vụ. 9 Chương 3: Tìm hiểu ứng dụng dạng dịch vụ 3.1. Tổng quan và các đặc điểm của ứng dụng dạng dịch vụ Dịch vụ (service) là một phần quan trọng trong hệ điều hành Microsoft Windows, trước đây được biết đến như các NT service. Nó là một ứng dụng có thể giao tiếp và được quản trị bởi trình quản lý điều khiển dịch vụ (Service Control Manager _ SCM). Một dịch vụ có thể: ● Tự khởi động khi máy tính khởi động. ● Chạy ngay cả khi không có người dùng nào đăng nhập vào máy tính. ● Hồi đáp các yêu cầu mà không cần sự can thiệp của con người. ● Được cấu hình để khởi động lại một cách tự động nếu việc khởi động ban đầu thất bại và không hiển thị bất cứ giao diện người dùng nào. Các đặc điểm này làm cho các dịch vụ thật sự lý tưởng để sử dụng trên máy chủ hay trên bất cứ nơi đâu bạn cần các chức năng chạy lâu dài, các chức năng không can thiệp với người dùng khác. Dịch vụ không những quan trọng để máy tính vận hành mà còn làm cho việc quản trị hệ thống trở nên dễ dàng và chấp nhận được. Ví dụ, không có dịch vụ DHCP (Dynamic Host Configuration Protocol: dịch vụ cấp địa chỉ IP động), người quản trị sẽ phải tự cấu hình địa chỉ IP cho mỗi máy tính. Không có dịch vụ DNS (Domain Name System: dịch vụ phân giải tên miền), người quản trị sẽ phải tự cấu hình và bảo trì các tập tin Host và Lmhost. Không có khả năng tự động hóa của các dịch vụ, những công việc tưởng chừng như đơn giản ở trên đây rất khó và thậm chí là không thể thực hiện được trong bối cảnh các doanh nghiệp lớn và rất lớn. Do các dịch vụ đóng một vai trò quan trọng trong cơ sở hạ tầng tính toán của một tổ chức, nên việc quản lý dịch vụ là một phần quyết định trong bất cứ công việc quản trị hệ thống nào. Chúng ta không thể để cho một dịch vụ ngừng hoạt động bởi vì nếu như vậy không những nó sẽ ảnh hưởng đến máy tính mà nó đang chạy trên đó mà nó còn ảnh hưởng đến các máy tính, các người dùng khác trong môi trường mạng nếu máy đang chạy dịch vụ là máy chủ. Nếu dịch vụ DHCP ngưng hoạt động, các máy tính KH OA C NT T – Đ H KH TN Chương 3: Tìm hiểu ứng dụng dạng dịch vụ. 10 không được cấp địa chỉ IP, người dùng sẽ không vào mạng được. Nếu dịch vụ DNS bị lỗi, dịch vụ Active Directory không dùng được, người dùng sẽ không xác định được các tài nguyên mạng. Việc quản lý dịch vụ giúp đảm bảo rằng: ● Các máy tính có thể hoàn thành vai trò của chúng, ví dụ như các máy trạm (workstation), các domain controller, các máy chủ mail và các máy chủ cơ sở dữ liệu,… ● Người dùng có thể truy xuất các tài nguyên kể cả trên máy cục bộ lẫn trên mạng. ● Khi có vấn đề xảy ra, bạn có thể được báo động ngay trong thời gian rất ngắn. Chẳng hạn, nếu dịch vụ DHCP dừng, sự thất bại của dịch vụ đó có thể được phát hiện ngay lập tức và dịch vụ DHCP sẽ khởi động lại, thậm chí trước cả khi người dùng cảm thấy có vấn đề. 3.2. Cơ chế hoạt động của các ứng dụng dạng dịch vụ Cũng như các ứng dụng khác, dịch vụ được chạy từ các tập tin thực thi. Ví dụ, dịch vụ DNS được chạy từ tập tin systemroot\ system32\dns.exe. Nhưng dịch vụ là một dạng đặc biệt của ứng dụng. Không giống như các tập tin thực thi của hầu hết các ứng dụng, tập tin thực thi của dịch vụ gồm các đoạn mã để chúng thực hiện những chức năng đặc biệt của một dịch vụ và để giao tiếp với trình quản lý điều khiển dịch vụ (SCM). Để chạy một ứng dụng như một dịch vụ, phải có các thành phần sau: ● Trình quản lý điều khiển dịch vụ (Service Control manager_SCM). SCM giao tiếp với dịch vụ bằng các lệnh chuyển tiếp yêu cầu dịch vụ khởi động, dừng, tạm dừng, hoặc tiếp tục. SCM cũng giám sát trạng thái của mỗi dịch vụ được cài đặt và thực hiện các hành động cụ thể nếu dịch vụ bị hỏng (dịch vụ kết thúc mà không gửi mã kết thúc thích hợp cho SCM). KH OA C NT T – Đ H KH TN Chương 3: Tìm hiểu ứng dụng dạng dịch vụ. 11 ● Tập tin thực thi của mỗi dịch vụ. Bao gồm đoạn mã cho phép dịch vụ hồi đáp lại những lệnh từ SCM và thông báo trạng thái của nó với SCM. Yêu cầu này tạo ra sự khác biệt giữa dịch vụ và các ứng dụng thông thường. Ví dụ, Notepad không thể chạy như một dịch vụ vì những người phát triển ứng dụng này không đưa vào đoạn mã cho phép Notepad giao tiếp với SCM. ● Chương trình điều khiển dịch vụ (Service Control Program_SCP). Cho phép người dùng giao tiếp với SCM. Ví dụ, để chỉnh sửa dịch vụ, bạn sử dụng một chương trình điều khiển dịch vụ để gửi các lệnh sửa đổi đến cho SCM. SCM sẽ gửi các lệnh này đến cho dịch vụ cần thay đổi, và các sửa đổi này sẽ có hiệu lực. * Khi một máy tính trên nền Win2K hay WS2K3 bắt đầu hoạt động, tập tin thực thi của SCM (services.exe) bắt đầu chạy trước cả khi hộp thoại đăng nhập xuất hiện. Điều này cho phép các dịch vụ tự khởi động trước cả khi bất kì người dùng nào đăng nhập. Sau khi services.exe khởi động, SCM sẽ quét nội dung trong KEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services. Ứng với mỗi dịch vụ liệt kê bên trong registry, SCM sẽ tạo ra một chỉ mục tương ứng với những chương trình điều khiển dịch vụ và sau đó khởi động các dịch vụ được đặt thuộc tính là tự khởi động. Khi một dịch vụ khởi động, nó phát sinh tối thiểu hai luồng. Một luồng được sử dụng để giao tiếp với SCM, luồng kia được sử dụng để trả lời các yêu cầu từ các ứng dụng khách. Một ứng dụng mà khởi tạo duy nhất một luồng thì không thể chạy như một dịch vụ. 3.3. Tài khoản dịch vụ và mật mã tài khoản dịch vụ Các dịch vụ phải chạy dưới một tài khoản người dùng (user account). Khi SCM khởi động dịch vụ, nó sẽ đăng nhập tới tài khoản đó. Nếu đăng nhập thành công, tiến trình của dịch vụ sẽ được cấp một thẻ truy cập (access token). Từ đó về sau, trong bất kì sự tương tác nào với những đối tượng có khả năng bảo mật (các đối tượng có các mô KH OA C NT T – Đ H KH TN Chương 3: Tìm hiểu ứng dụng dạng dịch vụ. 12 tả bảo mật gắn với chúng), thẻ này sẽ được sử dụng để xác nhận dịch vụ. Ví dụ, nếu dịch vụ thử truy cập đến một máy tính ở xa, thẻ này sẽ được sử dụng cho việc chứng thực. Nếu việc chứng thực thất bại, dịch vụ sẽ bị từ chối truy cập đến các tài nguyên. Trong Win2K, WS2K3, hầu hết các dịch vụ hệ điều hành chạy dưới tài khoản LocalSystem, một tài khoản đặc biệt có tất cả các đặc quyền có thể trên máy cục bộ. LocalSystem thường được sử dụng như một tài khoản dịch vụ vì nó có tất cả các đặc quyền và không yêu cầu thêm bất kì đặc quyền riêng nào để dịch vụ có thể chạy được. 3.4. Cách tạo một ứng dụng dịch vụ trong .NET Framework 3.4.1. Các lớp chính trong việc tạo dịch vụ Trong .NET Framework, bạn bắt đầu việc tạo một ứng dụng dạng dịch vụ bằng cách tạo ra một lớp thừa kế từ lớp System.ServiceProcess.ServiceBase. Sau đó bạn sẽ định nghĩa chồng các phương thức từ lớp này và định nghĩa thêm các hàm mới để phục vụ cho mục đích cuối của dịch vụ của bạn. Các lớp chính trong việc tạo một ứng dụng dạng dịch vụ là: ► System.ServiceProcess.ServiceBase: Lớp dịch vụ của bạn sẽ phải kế thừa từ lớp này. Bạn sẽ định nghĩa chồng lại các phương thức của lớp cơ sở, các phương thức này xác định hành động gì sẽ xảy ra khi trạng thái dịch vụ của bạn được thay đổi trong SCM. Thông thường, dịch vụ của bạn phải định nghĩa chồng ít nhất là phương thức OnStart và OnStop. Lớp ServiceBase có các phương thức chính sau và bạn có thể định nghĩa chồng lại bất kì phương thức nào phù hợp với ý muốn của mình: Phương thức Dùng để OnStart chỉ ra các hành động nào sẽ được thực hiện khi dịch vụ của bạn bắt đầu chạy. Bạn phải viết mã trong thủ tục này để dịch vụ của bạn thực hiện công việc một cách có hiệu quả. OnPause chỉ ra cái gì nên xảy ra khi dịch vụ của bạn bị tạm dừng. OnStop chỉ ra cái gì sẽ xảy ra khi dịch vụ dừng. OnContinue chỉ ra cái gì sẽ xảy ra khi dịch vụ của bạn được tiếp tục bình thường sau khi bị tạm dừng. KH OA C NT T – Đ H KH TN Chương 3: Tìm hiểu ứng dụng dạng dịch vụ. 13 OnShutDown chỉ ra cái gì nên xảy ra chỉ trước khi hệ thống của bạn shut down, nếu dịch vụ của bạn đang chạy tại thời điểm đó. Chú ý: một loạt các thuộc tính của ServiceBase xác định các phương thức nào có thể được gọi trong dịch vụ của bạn. Ví dụ, khi thuộc tính CanStop được thiết lập là true thì phương thức OnStop mới có hiệu lực. Khi thuộc tính CanPauseandContinue được thiết lập là true thì phương thức OnPause và OnContinue có thể được gọi. ► System.ServiceProcess.ServiceProcessInstaller và System.ServiceProcess.ServiceInstaller: Bạn sử dụng các lớp này để cài đặt và gỡ bỏ dịch vụ của bạn, các phương thức của các lớp này sẽ được gọi bởi tiện ích cài đặt (như InstallUtil.exe), bạn không thể gọi được các phương thức này. Trong đó ServiceProcessInstaller được sử dụng để chỉ ra tài khoản người dùng mà dịch vụ sẽ chạy bên dưới đó. Bạn có thể chỉ rõ một cặp tên và mật khẩu tài khoản hay dùng một tài khoản LocalService, LocalSystem,… Ứng với một ứng dụng dịch vụ chúng ta có một thực thể của ServiceProcessInstaller và ứng với mỗi dịch vụ trong ứng dụng chúng ta có một thực thể ServiceInstaller. ► Ngoài ra, một lớp có tên là ServiceController cũng có thể được sử dụng để đại diện cho chính dịch vụ. Lớp này thì không liên quan trong việc tạo một dịch vụ, nhưng chúng tôi cũng muốn đề cập đến nó trong phần này bởi vì nó là một lớp thật sự có ích trong quá trình viết một ứng dụng dạng dịch vụ. Bạn có thể sử dụng thành phần ServiceController để tương tác với các dịch vụ trên máy cục bộ hoặc bất kì máy nào mà bạn có thể truy cập. ServiceController cho phép bạn thực hiện các công việc quản trị trên dịch vụ như khởi động, dừng, tạm dừng,…, dịch vụ; lấy danh sách các dịch vụ,… Thành phần ServiceController sẽ chuyển các yêu cầu đến SCM, chứ không phải cho bản thân dịch vụ. Sau đó SCM sẽ thực hiện các hành động được yêu cầu như khởi động, dừng,… dịch vụ. Sau khi ServiceController đã chuyển các yêu cầu đến KH OA C NT T – Đ H KH TN Chương 3: Tìm hiểu ứng dụng dạng dịch vụ. 14 SCM, nó trở về, không đợi SCM chuyển yêu cầu đến dịch vụ. Do đó, khi xử lý các ngoại lệ bạn nên xử lý ngay trong bản thân dịch vụ hơn là trong lớp ServiceController. Khi bạn tạo một thực thể của lớp ServiceController, bạn phải thiết lập hai thuộc tính trên nó để chỉ ra dịch vụ tương tác với nó: tên máy mà dịch chạy trên đó và tên của dịch vụ mà bạn muốn điều khiển. Sau đó bạn có thể sử dụng lớp này để khởi động, dừng,.., hay nhiều thao tác khác trên dịch vụ. 3.4.2. Tạo một ứng dụng dịch vụ đơn giản Trong phần này chúng ta sẽ xem một ví dụ đơn giản để phần nào hình dung được các bước căn bản cần thiết để tạo một ứng dụng dịch vụ. Dịch vụ này chỉ đơn giản là ghi một lời nhắn vào even log mỗi lần dịch vụ khởi động hay dừng. Một số bước chính mà bạn cần thực hiện để tạo và sử dụng dịch vụ của bạn là: ● Tạo một project, dùng mẫu ứng dụng Windows Service. Mẫu ứng dụng này sẽ tạo ra một lớp kế thừa từ ServiceBase cho bạn. ● Viết mã cho thủ tục OnStart và OnStop, bạn cũng có thể định nghĩa chồng thêm bất cứ phương thức nào mà bạn muốn. ● Đưa các lớp installer cần thiết vào ứng dụng dịch vụ của bạn. ● Biên dịch project của bạn. ● Tạo một setup project để cài đặt dịch vụ của bạn. ● Thực hiện cài đặt dịch vụ. ● Vào SCM để khởi động dịch vụ của bạn. ■ Tạo dịch vụ. 1. Vào menu File, trỏ đến New, chọn Project. (Ctrl+Shift+N) Hộp thoại New Project xuất hiện. 2. Chọn Windows Service project từ danh sách các mẫu project của Visual Basic (bạn có thể chọn ngôn ngữ nếu muốn, ở đây chúng tôi sử dụng ngôn ngữ Visual Basic.Net). Đặt tên cho project là MyNewService. KH OA C NT T – Đ H KH TN Chương 3: Tìm hiểu ứng dụng dạng dịch vụ. 15 3. Phải chuột trong phần designer của Service1. Chọn Properties. Trong cửa sổ Properties, đặt thuộc tính ServiceName và Name của Service1 là MyNewService. 4. Đặt thuộc tính AutoLog là true để cho phép dịch vụ ghi vào event log các sự kiện xảy ra. 5. Trên memu View, chọn Code (F7) để mở phần soạn mã. Mở rộng phần Component Designer generated code để đến phương thức Main. Khi bạn đặt lại tên cho dịch vụ trong bước 3, tên lớp không được chỉnh sửa lại trong phương thức Main, bạn phải sửa lại. Sau khi sửa đổi phương thức Main của bạn sẽ như sau: Shared Sub Main() Dim ServicesToRun() As System.ServiceProcess.ServiceBase ServicesToRun = New System.ServiceProcess.ServiceBase() _ {New MyNewService()} System.ServiceProcess.ServiceBase.Run(ServicesToRun) End Sub Trong bước kế tiếp, ta sẽ sử dụng thành phần EventLog (một trong các thành phần mà ta có thể đưa vào dịch vụ) để ghi các sự kiện phát sinh trong dịch vụ. Sử dụng thành phần EventLog, bạn có thể dễ dàng kết nối đến các event log kể cả trên máy cục bộ hay ở xa và viết các thông tin vào đó. ■ Đưa eventlog vào dịch vụ của bạn. 1. Trong Solution Explorer (View à Solution Explorer (Ctrl+Alt+L)), phải chuột vào Service1.vb và chọn View Designer. 2. Trong Components tab của Toolbox, kéo thành phần EventLog vào phần designer. 3. Trong Solution Explorer, phải chuột vào Service1.vb,chọn View Code. 4. Định nghĩa event log trong hàm khởi tạo. Mở rộng phần Component Designer generated code để thấy hàm khởi tạo của dịch vụ. Public Sub New() KH OA C NT T – Đ H KH TN Chương 3: Tìm hiểu ứng dụng dạng dịch vụ. 16 MyBase.New InitializeComponent() If Not EventLog.SourceExists("MySource") Then EventLog.CreateEventSource("MySource", "MyNewLog") End If EventLog1.Source = "MySource" EventLog1.Log = "MyNewLog" End Sub ■ Xác định hành động gì sẽ xảy ra khi dịch vụ được khởi động Khi bạn tạo ứng dụng dịch vụ, phương thức OnStart đã tự động được định nghĩa chồng, do đó bạn chỉ cần thêm vào đoạn mã để xác định hành động gì sẽ xảy ra khi dịch vụ bắt đầu chạy. Trong trường hợp này, khi dịch vụ được khởi động, chương trình sẽ ghi một thông tin vào event log. Protected Overrides Sub OnStart(ByVal args() As String) EventLog1.WriteEntry("Start_MyNewService") End Sub ■ Xác định hành động gì sẽ xảy ra khi dịch vụ dừng Tương tự như phương thức OnStart, phương thức OnStop cũng được tự động định nghĩa chồng. Protected Overrides Sub OnStop() EventLog1.WriteEntry("Stop_MyNewService") End Sub * Bạn cũng có thể định nghĩa chồng lại các phương thức OnPause, OnContinue, và OnShutdown nếu bạn có nhu cầu. ■ Tạo các installer cho dịch vụ của bạn 1. Trở lại phần designer của Service1. 2. Phải chuột, chọn Properties để hiển thị cửa sổ Properties của dịch vụ. Kích chuột vào đường liên kết Add Installer bên dưới các thuộc tính của dịch vụ. Mặc định, một lớp thành phần gồm hai thành phần installer sẽ được thêm vào trong project của bạn. Thành phần này có tên là ProjectInstaller, và các thành phần KH OA C NT T – Đ H KH TN Chương 3: Tìm hiểu ứng dụng dạng dịch vụ. 17 cài đặt của nó bao gồm thành phần cài đặt cho dịch vụ của bạn và thành phần cài đặt cho các tiến trình kết hợp với dịch vụ. 3. Trong phần design của ProjectInstaller, phải chuột vào ServiceInstaller1, chọn Properties. 4. Trong hộp thoại properties của ServiceInstaller1 bạn đặt lại thuộc tính ServiceName là MyNewService. Có nghĩa là thành phần này sẽ đảm trách việc cài đặt cho dịch vụ MyNewService. (thường thì điều này đã được làm một cách tự động nhưng bạn hãy kiểm tra lại để đảm bảo tính chính xác). 5. Đặt thuộc tính StartType là Automatic. Bạn có thể chọn bất cứ dạng nào bạn thích. Automatic: dịch vụ sẽ được tự khởi động mỗi khi máy tính khởi động. Manual: dịch vụ không tự khởi động. Mỗi lần muốn khởi động dịch vụ bạn phải vào SCM để khởi động nó. Disable: dịch vụ không hiệu lực. 6. Kích chọn ServiceProcessInstaller1. Đặt thuộc tính Account của nó là LocalService để xác định dịch vụ sẽ chạy dưới tài khoản người dùng này. ■ Biên dịch project dịch vụ của bạn 1. Trong Solution Explorer. Phải chuột vào project và chọn Properties. Hộp thoại Properties Pages của project xuất hiện. 2. Trong ô bên trái, chọn General tab trong thư mục Common Properties. 3. Trong danh sách Startup object, chọn MyNewService. Sau đó kích chọn nút OK để kết thúc. KH OA C NT T – Đ H KH TN Chương 3: Tìm hiểu ứng dụng dạng dịch vụ. 18 Hình 3.1 4. Bấm CTRL+SHILT+B để biên dịch project. * Đến đây thì project của bạn đã được biên dịch xong, nó có thể được triển khai. Một setup project sẽ được sử dụng để cài đặt các tập tin đã biên dịch của MyNewService project và chạy các cài đặt cần thiết để chạy dịch vụ. Để tạo một setup project hoàn chỉnh, bạn phải đưa tập tin MyNewService.exe vào setup project và sau đó đưa một hành động tùy chọn để có được bản cài đặt cho tập tin MyNewService.exe hoàn chỉnh. ■ Để tạo một setup project cho dịch vụ của bạn 1. Trong menu File, chỉ đến Add Project, sau đó chọn New Project. 2. Trong ô Project Types, chọn thư mục Setup and Deployment Projects. 3. Trong ô Templates, chọn Setup Project. Đặt tên cho project này là MyServiceSetup. KH OA C NT T – Đ H KH TN Chương 3: Tìm hiểu ứng dụng dạng dịch vụ. 19 Đến đây một setup project đã được thêm vào. Tiếp theo bạn sẽ đưa tập tin MyNewService.exe vào setup project. ■ Đưa tập tin MyNewService.exe vào setup project 1. Trong phần Solution Explorer, phải chuột vào MyServiceSetup, trỏ đến Add, sau đó chọn Project Output. Hộp thoại Add Project Output Group xuất hiện. 2. MyNewService đã được chọn sẵn trong phần Project. 3. Chọn Primary Output à OK Hình 3.2 ■ Đưa một hành động tùy chọn vào setup project 1. Trong Solution Explorer, phải chuột vào MyServiceSetup, trỏ đến View, sau đó chọn Custom Actions. 2. Trong màn hình Custom Actions, phải chuột vào nốt Custom Actions và chọn Add Custom Action. KH OA C NT T – Đ H KH TN Chương 3: Tìm hiểu ứng dụng dạng dịch vụ. 20 Hộp thoại Select Item in Project xuất hiện. 3. Trong hộp danh sách, nhắp đôi chuột vào Application Folder để mở nó, chọn Primary Output from MyNewService (Active) à OK Hình 3.3 4. Trong Solution Explorer, phải chuột vào MyServiceSetup project, chọn Build. ■ Cài đặt dịch vụ ● Chạy tập tin Setup.exe mà chương trình vừa biên dịch ra. Hoặc: ●Trong Solution Explorer,phải chuột vào setup project (MyServiceSetup), chọn Install. ■ Khởi động và dừng dịch vụ của bạn 1. Mở Services Control Manager: ● Trong Windows Server 2003: Start à All Programs à Administrator Tools à Services. KH OA C NT T – Đ H KH TN Chương 3: Tìm hiểu ứng dụng dạng dịch vụ. 21 Trong cửa sổ Services bạn sẽ nhìn thấy một danh sách các dịch vụ đã cài đặt trong máy tính, kể cả dịch vụ mà chúng ta vừa tạo ra và đã cài đặt. 2. Phải chuột vào tên của dịch vụ muốn khởi động, kích Start. 3. Phải chuột vào tên dịch vụ, kích Stop khi muốn dừng dịch vụ. ■ Kiểm tra đầu ra event log của dịch vụ của bạn 1. Mở cửa sổ Component Services. Start à All Programs à Administrator Tools à Component Services 2. Mở rộng mục Event Viewer (Local). 3. Chọn MyNewLog Bạn sẽ thấy các tin nhắn dạng thông tin do dịch vụ của ta ghi vào như: Start_MyNewservice hay Stop_MyNewService. ■ Gỡ bỏ dịch vụ của bạn ● Start à Control Panel à Add/Remove Programs, chọn dịch vụ muốn gỡ bỏ và kích chọn Uninstall. ● Bạn cũng có thể gỡ bỏ dịch vụ trong môi trường lập trình của mình bằng cách: Trong Solution Explorer, phải chuột vào setup project (MySetupProject), chọn UnInstall. 3.5. Sự khác nhau giữa các ứng dụng dịch vụ và các ứng dụng .NET Framework khác Các ứng dụng dịch vụ và các ứng dụng .NET FrameWork khác nhau một vài điểm chính như sau: ● Tập tin thực thi đã đươc biên dịch, tập tin mà một project ứng dụng dịch vụ tạo ra phải được cài đặt trên máy trước khi project có thể hoạt động đúng nghĩa. Bạn không thể debug hay chạy một ứng dụng dịch vụ bằng cách bấm F5 hay F11; bạn không thể chạy dịch vụ ngay lập tức hay từng bước trong mã của nó. Thay vào đó, bạn phải cài đặt và khởi động dịch vụ của bạn, sau đó mới gán một debugger vào quá trình KH OA C NT T – Đ H KH TN Chương 3: Tìm hiểu ứng dụng dạng dịch vụ. 22 xử lý của dịch vụ và bạn có thể debug ứng dụng của bạn bằng cách sử dụng tất cả các cách debug chuẩn của Visual Studio. ● Bạn phải tạo các thành phần cài đặt cho các ứng dụng dịch vụ. Các thành phần cài đặt sẽ thực hiện cài đặt, đăng kí dịch vụ của bạn trên máy đích và tạo một chỉ mục cho dịch vụ của bạn với SCM của Windows. ● Trong phương thức Main, ứng dụng dịch vụ của bạn phải đưa ra lệnh Run cho các dịch vụ mà project của bạn có. Phương thức Run này sẽ nạp các dịch vụ vào trong SCM trên máy đích thích hợp. Ở đây các bạn nên chú ý rằng việc nạp một dịch vụ thì không giống như việc khởi động dịch vụ. ● Các ứng dụng dịch vụ của Windows chạy trong phạm vi bảo mật của chính chúng và được khởi động trước khi người dùng đăng nhập vào Windows trên máy mà dịch vụ được cài đặt. KH OA C NT T – Đ H KH TN Chương 4: Tìm hiểu về WMI (Windows Management Instrument). 23 Chương 4: Tìm hiểu về WMI (Windows Management Instrument) 4.1. Tổng quan về WMI 4.1.1. Khái niệm script và ngôn ngữ viết script Trước khi tìm hiểu về kỹ thuật WMI chúng ta sẽ tìm hiểu sơ lược về script và ngôn ngữ viết script. Có thể đây là hai khái niệm hoàn toàn không liên quan đế đề tài nhưng để hiểu một cách thấu đáo và nhanh chóng về WMI chúng ta không thể không thông qua script. ● Script là một chương trình được viết bằng ngôn ngữ viết script (như là JScript hoặc VBScript và các ngôn ngữ viết script thay thế như Rexx, Python, và Perl). Khi so sánh các ngôn ngữ lập trình như C++ và Visual Basic, các ngôn ngữ viết script thì thích hợp hơn để tạo ra các ứng dụng nhỏ. Script thích hợp với: + Việc thao tác với môi trường Windows. + Chạy các chương trình khác. + Tự động hóa các thủ tục đăng nhập. + Gởi các khóa một cách thường xuyên đến một ứng dụng. ● Ngôn ngữ viết script là một ngôn ngữ bất kì (như Microsoft Visual Basic Scripting Edition (VBScript) hoặc Microsoft JScript) có thể biên dịch hoặc hiểu được các script đặc biệt. Các ngôn ngữ viết script thì thích hợp để tạo ra các ứng dụng nhỏ có khả năng đưa ra các giải pháp nhanh chóng cho những vấn đề nhỏ. Các script có khả năng cho phép bạn truy cập cũng như thao tác với rất nhiều thành phần nằm sâu bên trong hệ thống, nhưng thật sự để làm được điều đó các script phải cần đến WMI. 4.1.2. Tổng quan về WMI Được đưa ra đầu tiên vào năm 1998 như là một thành phần bổ sung vào bản Windows NT 4.0 Service Pack 4, WMI là một kỹ thuật cho phép quản lý các thành phần cốt lõi bên trong hệ điều hành Windows 2000, Windows XP, và KH OA C NT T – Đ H KH TN Chương 4: Tìm hiểu về WMI (Windows Management Instrument). 24 Windows 2003. WMI cung cấp cho bạn một phương pháp chuẩn để tương tác với thông tin quản lý hệ thống và các giao diện lập trình ứng dụng cơ sở. Trước đây, và thậm chí cả ngày nay nhiều người vẫn sử dụng các công cụ quản trị đồ họa để quản lý và giám sát các máy trạm và máy chủ. Hầu như chắc chắn bạn đã dùng hoặc đang dùng các công cụ quản trị đồ họa để quản lý các tài nguyên của Windows như các ổ đĩa, các tập tin, thư mục, các thành phần mạng, các cấu hình hệ điều hành, máy in, ..v..v. Mặc dù các công cụ đồ họa đã cung cấp hầu hết các giải pháp ứng với các chức năng .Nhưng trước WMI, tất cả các công cụ quản trị đồ họa Windows đều dựa vào giao diện lập trình ứng dụng Win32 (Win32 APIs) để truy cập và quản lý các tài nguyên Windows. Tình hình này đã làm cho các nhà quản trị hệ thống không dễ dàng gì khi muốn sử dụng các ngôn ngữ viết script thông thường để tự động hóa các công việc quản trị thông thường, bởi vì hầu hết các ngôn ngữ viết script không thể gọi Win32 APIs một cách trực tiếp. WMI đã thay đổi điều đó bằng cách cung cấp một cơ cấu và mô hình thích hợp để tất cả các tài nguyên Windows đều được mô tả và bày ra thế giới bên ngoài. Và trên tất cả là người quản trị hệ thống có thể sử dụng thư viện viết script WMI để tạo ra các script quản trị hệ thống để quản lý bất cứ tài nguyên Windows nào được bày ra thông qua WMI. Với WMI bạn có thể sử dụng VBScript, Jscript hay bất kì ngôn ngữ viết script nào để viết các script dùng để quản lý và tự động hóa các mặt sau trong các hệ thống xí nghiệp, các hệ thống mạng và các ứng dụng của bạn: ● Quản lý hệ thống Windows Server 2003, Windows XP Professional, và Windows 2000: Bạn có thể viết các script để truy lục dữ liệu thực thi, quản lý các event log, các hệ thống tập tin, máy in, các dịch vụ, tài nguyên chia sẻ, và nhiều thành phần cũng như các cấu hình hệ điều hành khác. ● Quản lý mạng: Bạn có thể sử dụng WMI để viết các script quản lý các dịch vụ mạng như DNS, DHCP,… KH OA C NT T – Đ H KH TN Chương 4: Tìm hiểu về WMI (Windows Management Instrument). 25 ● Giám sát tình trạng hệ thống: bạn có thể viết các script để giám sát và trả lời các sửa đổi hệ thống tập tin và thanh ghi cũng như các thay đổi hệ điều hành thời gian thực khác. 4.2. Kiến trúc WMI Kiến trúc WMI gồm ba lớp chính: ● Phần tiêu thụ (Consumers). ● Cơ sở hạ tầng WMI (WMI infrastructure). ● Các tài nguyên được quản lý (Managed resources). Hình 4.1 KH OA C NT T – Đ H KH TN Chương 4: Tìm hiểu về WMI (Windows Management Instrument). 26 4.2.1. Các tài nguyên được quản lý (Managed resources) Các tài nguyên được quản lý là thành phần logic hoặc vật lý bất kì nào, các thành phần này được bày ra và có thể được điều khiển bằng cách sử dụng WMI. Các tài nguyên Windows có thể được quản lý bằng WMI gồm hệ thống máy tính, các ổ đĩa, các thiết bị ngoại vi, các tập tin, thư mục, các thành phần mạng, hệ điều hành phụ, máy in, các dịch vụ, các chia sẻ, Active Directory,…. Tài nguyên được quản lý giao tiếp với WMI thông qua Provider. Khi bạn bắt đầu viết chương trình tương tác với các tài nguyên được quản lý, bạn sẽ thường nhìn thấy thuật ngữ instance (thực thể). Thuật ngữ này được sử dụng để chỉ một đại diện ảo của tài nguyên được quản lý. 4.2.2. Cơ sở hạ tầng WMI (WMI infrastructure) Lớp giữa trong kiến trúc WMI là cơ sở hạ tầng WMI bao gồm 3 thành phần chính: Common Information Model Object Manager (CIMOM), kho lưu trữ Common Information Model (CIM), và các Provider. Đồng thời, ba thành phần WMI này cung cấp cơ sở hạ tầng thông qua dữ liệu quản lý được định nghĩa, được bày ra, được truy cập, và được lấy về. Thành phần thứ 4 tuy nhỏ nhưng hoàn toàn cần thiết cho việc viết script là thư viện viết script WMI. 4.2.2.1. Thư viện viết script WMI Thư viện viết script WMI cung cấp một tập các đối tượng tự động thông qua các ngôn ngữ viết scrip (như VBScript, JScript và ActivePerl của ActiveState) truy cập cơ sở hạ tầng WMI. Thư viện viết script WMI được cung cấp trong một thư viện liên kết động đơn lẻ là wbemdisp.dll, trong thư mục %SystemRoot%\system32\wbem. Các đối tượng tự động trong thư viện viết script WMI cung cấp một mô hình viết script thích hợp và đồng bộ cho cơ sở hạ tầng WMI. Một khi bạn hiểu được làm thế nào để lấy ra kiểu tài nguyên được quản lý bằng cách sử dụng thư KH OA C NT T – Đ H KH TN Chương 4: Tìm hiểu về WMI (Windows Management Instrument). 27 viện viết script WMI, bạn có thể dễ dàng sử dụng các bước tương tự để lấy ra các tài nguyên quản lý WMI khác. 4.2.2.2. Kho lưu trữ CIM Kho lưu trữ CIM là một cơ sở dữ liệu đối tượng, nó lưu trữ các đối tượng hay các lớp. Kho lưu trữ CIM được quản lý bởi CIMOM. CIM gồm có các lớp, một lớp đại diện cho một tài nguyên có thể được quản lý. Tuy nhiên, các lớp này khác hơn các lớp thông thường một chút, các lớp này đại diện cho các tài nguyên động. Có nghĩa là, các thực thể của các tài nguyên này không được lưu trữ trong CIM mà nó được lấy về bởi Provider mỗi khi có yêu cầu từ phần tiêu thụ. Sở dĩ có điều này là vì trạng thái hoạt động của hầu hết các tài nguyên được quản lý thay đổi một cách thường xuyên nên phải được đọc theo yêu cầu để đảm bảo thông tin lấy về là chính xác nhất. Chú ý: Thuật ngữ kho là một điều gây nhầm lẫn trong phạm vi của CIM. Mặc dù CIM là một kho và có khả năng lưu trữ dữ liệu tĩnh nhưng vai trò chính của nó là lưu trữ các bản thiết kế cho các tài nguyên được điều khiển. Các lớp trong CIM được tổ chức có cấp bậc, các lớp con thừa kế từ các lớp cha. Và các lớp cơ sở, cốt lõi nhất được bảo vệ chặt chẽ khỏi hệ thống và những người phát triển phần mềm. Các lớp trong CIM gồm các thuộc tính mô tả cho cấu hình, trạng thái của các tài nguyên được quản lý và các phương thức là các hàm xử lý thực hiện các hành trên tài nguyên được quản lý. Thực tế, CIM được lưu trữ tại thư mục %SystemRoot%\system32\wbem\ Repository\FS\ và bao gồm bốn tập tin: index.btr, index.map, objects.data, objects.map. Trong Microsoft Windows 2000 và Windows NT4.0 Service Pack 4, CIM được chứa trong %SystemRoot%\system32\wbem\Respository\CIM.rep. Trong Windows Millennium Edition (Me), Windows 98, và Windows 95 OSR 2.5, CIM được chứa trong %windir%\system\wbem\Respository\CIM.rep. KH OA C NT T – Đ H KH TN Chương 4: Tìm hiểu về WMI (Windows Management Instrument). 28 4.2.2.3. CIMOM CIMOM (Common information Model Object Manager) điều khiển sự tương tác giữa các phần tiêu thụ và các Provider. Bạn có thể xem CIMOM như một người môi giới thông tin, tất cả các yêu cầu và luồng dữ liệu đều phải thông qua CIMOM. Khi một yêu cầu từ phần tiêu thụ đến CIMOM, CIMOM sẽ xem xét các yêu cầu và xác định xem Provider nào có thông tin mà phần tiêu thụ này mong muốn. Do đó phần tiêu thụ chỉ cần biết thông tin mà mình mong muốn là gì chứ không cần phải quan tâm đến nguồn gốc hay bất kì chi tiết nào về nguồn gốc của thông tin, nó cũng không cần quan tâm đến việc các thông tin này được lấy ra như thế nào và bằng cách nào. Để cung cấp cách thức chung cho các phần tiêu thụ truy cập WMI, CIMOM cung cấp các dịch vụ cốt lõi sau trong cơ sở hạ tầng WMI: ● Đăng kí Provider: Các Provider sẽ đăng kí vị trí và thông tin về khả năng của mình với CIMOM. Thông tin này được lưu trữ trong CIM. ● Định tuyến yêu cầu: CIMOM sẽ sử dụng thông tin đăng kí của Provider để gửi các yêu cầu của phần tiêu thụ đến các Provider thích hợp. ● Truy cập từ xa: các phần tiêu thụ truy cập đến các hệ thống có hỗ trợ WMI từ xa bằng cách kết nối đến CIMOM trên hệ thống từ xa. Một khi kết nối được thiết lập thì các phần tiêu thụ có thể thực hiện các thao tác tương tự các thao tác được thực hiện trên máy cục bộ. ● Bảo mật: CIMOM điều khiển việc truy cập đến các tài nguyên được điều khiển bằng cách xác nhận tính hợp lệ cho mỗi lần truy cập trước khi người dùng được phép kết nối đến WMI trên máy cục bộ hoặc máy ở xa. Bảo mật của WMI thì không chồng lên hay phá vỡ các bảo mật của hệ điều hành. ● Truy vấn: cho phép phần tiêu thụ đưa ra các lời truy vấn đến bất kì tài nguyên được điều khiển nào bằng cách sử dụng WQL (WMI Query Language: Ngôn ngữ truy vấn WMI). CIMOM sẽ thực hiện ước lượng cho các câu truy vấn này trong trường hợp các Provider không hỗ trợ các thao tác truy vấn tự nhiên. KH OA C NT T – Đ H KH TN Chương 4: Tìm hiểu về WMI (Windows Management Instrument). 29 ● Sự kiện: cho phép phần tiêu thụ nắm bắt các sự kiện đại diện cho các thay đổi của các tài nguyên được quản lý. CIMOM sẽ thăm dò tài nguyên được quản lý tại khoảng mà bạn chỉ định, nó sẽ sinh ra một thông báo sự kiện khi điều kiện bắt sự kiện được thỏa. 4.2.2.4. Các Provider Các Provider hoạt động như một người trung gian giữa CIMOM và tài nguyên được quản lý. Các Provider yêu cầu thông tin từ các tài nguyên được quản lý và gởi các chỉ thị đến đó thay cho các phần tiêu thụ. Các Provider giao tiếp riêng với từng tài nguyên được quản lý qua các giao diện lập trình ứng dụng tự nhiên, do đó các chi tiết thi hành đối với từng tài nguyên được quản lý sẽ được che dấu một cách cẩn thận. Provider giao tiếp với CIMOM qua giao diện lập trình WMI. Thường thì các Provider được thực hiện như các thư viện liên kết động trong thư mục %SystemRoot%\system32\wbem, WMI bao gồm nhiều Provider gắn vào hệ điều hành Win2K, Windows XP, và WS2K3. Các Provider tích hợp này cũng được biết đến như các provider chuẩn. Sau đây là một vài provider chuẩn trong Win2K, Windows XP, và WS2K3. ● Active Directory provider: ánh xạ các đối tượng Active Directory vào WMI. ● Event Log provider: quản lý các event log của Windows. Ví dụ: đọc, sao lưu dự phòng, xóa, sao chép, giám sát,… và thay đổi các cấu hình event log. ● Performance Counter provider: cung cấp cách truy cập đến dữ liệu thực thi thô. ● Registry provider: đọc, viết, liệt kê, giám sát, tạo và xóa các khóa và giá trị các thanh ghi. ● WDM provider: cung cấp cách truy cập đến các thông tin trên các trình điều khiển thiết bị WDM. ● Win32 provider: cung cấp các thông tin về máy tính, đĩa, các thiết bị ngoại vi, các tập tin, thư mục, thành phần mạng, máy in, bộ xử lý, dịch vụ,…. KH OA C NT T – Đ H KH TN Chương 4: Tìm hiểu về WMI (Windows Management Instrument). 30 Trong phần 4.4 chúng ta sẽ tìm hiểu kỹ về provider này sau khi đã xem một ví dụ về cách áp dụng WMI trong ứng dụng trong phần 4.3. ● Windows Installer provider: cung cấp cách truy cập đến các thông tin về các phần mềm được cài đặt. 4.2.3. Phần tiêu thụ (Consumers) Phần tiêu thụ là lớp trên cùng trong kiến trúc của WMI. Phần tiêu thụ là một script, một ứng dụng, hoặc các công cụ quản trị khác truy cập và điều khiển thông tin quản lý một cách hiệu quả thông qua cơ sở hạ tầng WMI. 4.3. Ví dụ ứng dụng WMI đơn giản Trong phần này chúng ta sẽ xem một ví dụ đơn giản về việc sử dụng WMI để lấy dung lượng bộ nhớ vật lý của máy cục bộ. Ở đây chúng tôi sẽ sử dụng ngôn ngữ VBScript để viết một script đơn giản, bạn không cần phải quan tâm nhiều lắm đến vấn đề ngôn ngữ mà vấn đề chính là hiểu các bước thực hiện. VBScript là một ngôn ngữ viết script như nhiều ngôn ngữ viết script khác và nó có nhiều nét giống với ngôn ngữ Visual Basic nên chúng tôi nghĩ cũng không có gì là quá phức tạp để hiểu. Có nhiều cách để viết một script, nhưng ở đây chúng tôi sẽ chỉ cho bạn một cách đơn giản nhất để viết script này. Đầu tiên, bạn chỉ việc mở trình soạn thảo Notepad, sao chép đoạn mã sau vào đó: strComputer = "." Set wbemServices = GetObject("winmgmts:\\" & strComputer) Set wbemObjectSet = wbemServices.InstancesOf("Win32_LogicalMemoryConfiguratio n") For Each wbemObject In wbemObjectSet WScript.Echo "Total Physical Memory (kb): " & wbemObject.TotalPhysicalMemory Next Bạn sẽ lưu tập tin này lại với tên “vidu.vbs”, sau đó kích đôi chuột vào tên tập tin trong thư mục mà bạn đã lưu nó vào để chạy nó. Lúc này bạn sẽ thấy một KH OA C NT T – Đ H KH TN Chương 4: Tìm hiểu về WMI (Windows Management Instrument). 31 hộp thoại tương tự như hình bên dưới xuất hiện mang theo thông tin về dung lượng của bộ nhớ vật lý của bạn. Hình 4.2 Tiếp theo chúng ta sẽ xem lại ba bước chính mà đoạn mã trên đã thực hiện: ■ Bước 1: kết nối đến dịch vụ WMI. Bước đầu tiên trong bất kì script nào là thiết lập một kết nối đến WMI. Việc kết nối đến WMI trên máy tính đích cũng giống như các máy tính ở xa, bạn chỉ cần gọi hàm GetObject và đưa vào đó tên thư viện viết script là “winmgmts:” và tên của máy tính đích. strComputer = "." Set wbemServices = GetObject("winmgmts:\\" & strComputer) Nếu bạn không nhớ chính xác tên máy cục bộ của mình, bạn có thể đưa vào kí hiệu “.”, WMI sẽ hiểu đó chính là máy cục bộ. Hàm GetObject sẽ trả về một đối tượng SwbemServices, đối tượng này cũng được định nghĩa trong thư viện viết script WMI và bạn có thể sử dụng bất kì phương thức nào của đối tượng này, phương thức InstancesOf bên dưới là một ví dụ. ■ Bước 2: lấy về các thực thể của các đối tượng được quản lý. Set wbemObjectSet = wbemServices.InstancesOf("Win32_LogicalMemoryConfiguratio n") Ở đây, tùy vào mong muốn mà bạn sẽ sử dụng phương thức InstancesOf của để lấy tất cả các thực thể của tài nguyên được quản lý được xác định bởi tên lớp của tài nguyên (trong trường hợp này là: Win32_LogicalMemoryConfiguration). KH OA C NT T – Đ H KH TN Chương 4: Tìm hiểu về WMI (Windows Management Instrument). 32 Phương thức InstancesOf trả về một tập SwbemObjectSet cũng là một đối tượng được định nghĩa trong thư viện viết script WMI. ■ Bước 3: Hiển thị các thuộc tính của các tài nguyên được quản lý. Mỗi phần tử của SWbemObjectSet là một đối tượng SWbemObject đại diện cho một thực thể của tài nguyên được yêu cầu bởi vì một tài nguyên thường có nhiều thực thể. Trong ví dụ này, chúng ta sử dụng thuộc tính TotalPhysicalMemory để xem dung lượng của bộ nhớ vật lý. Nhưng bạn có thể gọi bất kì thuộc tính nào của đối tượng SWbemObject để kiểm tra. For Each wbemObject In wbemObjectSet WScript.Echo "Total Physical Memory (kb): " & wbemObject.TotalPhysicalMemory Next 4.4. Tìm hiểu Win32 provider Win32 provider định nghĩa các lớp dùng để đại diện cho phần cứng cũng như phần mềm một cách hiệu quả trên các hệ thống Windows và các mối quan hệ giữa chúng. 4.4.1. Các lớp mà Win32 provider hỗ trợ Các lớp mà Win32 provider hỗ trợ được chia ra thành các phần chính như sau. Chúng tôi sẽ liệt kê khá chi tiết trong phần này bởi vì thật sự trong quá trình làm đề tài chúng tôi dùng khá nhiều lớp do Win32 provider cung cấp kể cả cho các vấn đề chính lẫn vấn đề phụ. Do đó chúng tôi hy vọng là qua phần liệt kê này sẽ làm cho các bạn thấy được phần nào sức mạnh của WMI và sau đó nếu muốn bạn cũng có thể vận dụng nó một cách dễ dàng. ● Phần cứng hệ thống máy tính: Các lớp này đại diện cho các đối tượng liên quan đến phần cứng. + Các lớp đại diện cho các thiết bị làm mát như quạt, cảm biến nhiệt, các thiết bị làm lạnh,… + Các lớp đại diện cho các thiết bị đầu vào. KH OA C NT T – Đ H KH TN Chương 4: Tìm hiểu về WMI (Windows Management Instrument). 33 + Các lớp đại diện cho các thiết bị lưu trữ như ổ đĩa cứng, ổ đĩa CD- ROM. + Các lớp đại diện cho các thiết bị hệ thống như bộ nhớ hệ thống, bộ nhớ cache, bus, và các mạch điều khiển. + Các lớp đại diện cho các thiết bị mạng. + Các lớp đại diện cho các dụng cụ, sự kiện, và việc cung cấp của nguồn điện. + Các lớp đại diện cho máy in. + Các lớp đại diện cho hệ thống điện thoại. + Các lớp đại diện cho màn hình, card màn hình và các thiết lập kết hợp với chúng. ● Hệ điều hành: các lớp đại diện cho các đối tượng liên quan đến hệ điều hành. + Các lớp đại diện cho màn hình nền. + Các lớp đại diện cho các driver của các thiết bị ảo và các driver hệ thống. + Các lớp đại diện cho cách thức sắp xếp logic của một đĩa cứng, cấu trúc thư mục, các ổ đĩa,… + Các lớp đại diện cho các kết nối mạng, các cấu hình kết nối mạng,… + Các lớp đại diện cho các sự kiện của hệ điều hành. + Các lớp đại diện cho hệ điều hành và các cấu hình của nó. + Các lớp đại diện cho bộ xử lý hệ thống. + Các lớp đại diện cho các thanh ghi của Windows. KH OA C NT T – Đ H KH TN Chương 4: Tìm hiểu về WMI (Windows Management Instrument). 34 + Các lớp đại diện cho các cấu hình cho các công việc được lập lịch. + Các lớp đại diện cho các thiết lập bảo mật hệ thống. + Các lớp đại diện cho các dịch vụ và các dịch vụ cơ sở. + Các lớp đại diện cho các tài nguyên chia sẻ. + Các lớp đại diện cho các nhóm chưong trình. + Các lớp đại diện cho các thông tin tài khoản người dùng. ● Các ứng dụng được cài đặt: các lớp đại diện cho các đối tượng liên quan đến các phần mềm được cài đặt. ● Quản lý dịch vụ WMI: các lớp dùng để quản lý WMI. ● Và cuối cùng là các lớp đại diện cho các dữ liệu thực thi thô và các dữ liệu đã được định dạng. Có lẽ, qua phần liệt kê một cách tương đối đầy đủ như ở trên các bạn cũng phần nào thấy được sự nổi bật của nhóm hệ điều hành, các lớp đại diện cho hệ điều hành và các đối tượng liên quan đến hệ điều hành. Và trong phần tiếp theo chúng ta sẽ xem xét kỹ hơn về lớp Win32_OperatingSystem. 4.4.2. Lớp Win32_OperatingSystem Lớp Win32_OperatingSystem đại diện cho một hệ điều hành được cài đặt trên hệ thống máy Win32. Bất kì hệ điều hành nào có thể được cài đặt trên hệ thống Win32 đều có nguồn gốc hoặc là thành viên của lớp này. Nếu một máy có nhiều hệ điều hành được cài đặt, lớp này sẽ chỉ trả về một thực thể của hệ điều hành đang hoạt động hiện thời. Win32_OperatingSystem định nghĩa các phương thức sau: _ Reboot. _ SetDateTime _ Shutdown. _ Win32Shutdown KH OA C NT T – Đ H KH TN Chương 4: Tìm hiểu về WMI (Windows Management Instrument). 35 Chúng ta sẽ sử dụng phương thức Win32Shutdown của lớp Win32_OperatingSystem để thực hiện lệnh shutdown cho máy cục bộ cũng như các máy ở xa. KH OA C NT T – Đ H KH TN Chương 5: Tìm hiểu System.DirectoryServices. 36 Chương 5: Tìm hiểu System.DirectoryServices 5.1. Tổng quan về System.DirectoryServices System.DirectoryServices là một namespace trong .Net Framework, nó cho phép truy cập đến Active Directory thông qua kỹ thuật .NET. Với System.DirectoryServices bạn có thể sử dụng các ngôn ngữ lập trình C#.NET và Visual Basic.NET để phát triển các ứng dụng có nhu cầu truy cập các thông tin trong Active Directory như các người sử dụng, các máy tính, các tài nguyên chia sẻ trong một domain. Sơ đồ sau cho thấy cách sắp xếp của các API danh bạ, bao gồm cả lớp mã quản lý: Hình 5.1 Ở đây, trong phạm vi đề tài này chúng ta sẽ sử dụng System.DirectoryServices namespace để lấy về tên của các máy tính thuộc domain từ Active Directory trên máy domain controller. Và có lẽ không cần phải nói nhiều hơn nữa, chúng ta sẽ xem cách sử dụng System.DirectoryServices namespace cụ thể ở phần tiếp theo. 5.2. Cách sử dụng System.DirectoryServices 5.2.1. Đưa System.DirectoryServices vào ứng dụng KH OA C NT T – Đ H KH TN Chương 5: Tìm hiểu System.DirectoryServices. 37 Để sử dụng System.DirectoryServices, dĩ nhiên điều đầu tiên là chúng ta phải đưa System.DirectoryServices vào ứng dụng. Trong môi trường lập trình, tại project mà bạn muốn sử dụng System.DirectoryServices: 1. Chọn Project à Add Reference … 2. Chọn thư viện System.DirectoryServices.dll trong danh sách. Hình 5.2 3. đưa dòng sau vào mã: Imports System.DirectoryServices 5.2.2. Liên kết và sử dụng các đối tượng danh bạ 5.2.2.1. Đối tượng danh bạ Mỗi tài nguyên mạng được đại diện bằng một đối tượng trong danh bạ. Các đối tượng danh bạ có các đặc điểm sau: KH OA C NT T – Đ H KH TN Chương 5: Tìm hiểu System.DirectoryServices. 38 ● Tên. Ví dụ, trong sơ đồ bên dưới tên của một đối tượng người dùng là CN = Jeff Smith. ● Cha. Các đối tượng mạng đều kế thừa và có một đối tượng cha cho đến khi bạn dò đến đối tượng gốc ở trên đỉnh của cây kế thừa. ● Đường dẫn. Đường dẫn của đối tượng danh bạ được xây dựng với tên của đối tượng cha đặt trước tên đối tượng cho đến đối tượng gốc. Ví dụ, đường dẫn của đối tượng người dùng CN=Jeff Smith là: DC=Fabrikam, DC=COM, OU=Sales, CN=Jeff Smith. Các đường dẫn sử dụng một cú pháp được định bởi đặc tả LDAP. Hình 5.3 5.2.2.2. Liên kết đến các đối tượng danh bạ Ở đây, trong phần này chúng tôi không muốn các bạn bối rối hơn nữa vì một loạt các khái niệm, định nghĩa, giới thiệu,…Do đó chúng tôi sẽ đưa ra các ví dụ cụ thể mà chúng tôi tin chắc là hoàn toàn dễ hiểu đối với tất cả mọi người. Và từ các ví dụ này các bạn có thể dễ dàng áp dụng lại cho các mục đích của mình. ● Liên kết đến domain hiện hành: trong ngôn ngữ VisualBasic.NET bạn chỉ cần khai báo: Dim ent As New DirectoryEntry() ● Liên kết đến một máy chủ cụ thể: bạn chỉ cần đưa tên máy chủ mà bạn muốn kết nối đến. Ví dụ như bạn muốn liên kết đến máy chủ tên là server1 thì bạn sẽ khai báo như sau: KH OA C NT T – Đ H KH TN Chương 5: Tìm hiểu System.DirectoryServices. 39 Dim ent As New DirectoryEntry("LDAP://server01") ● Liên kết đến một domain cụ thể: tương tự để liên kết đến một domain cụ thể bạn sẽ phải đưa vào tên của domain ấy. Dim ent As New DirectoryEntry("LDAP://platform.fabrikam.com") ● Liên kết đến một đối tượng cụ thể: Khi bạn cần chỉnh sửa hay đọc thông tin từ một đối tượng cụ thể, bạn sẽ đưa tên của đối tượng đó vào. Giả sử như ví dụ trong phần 5.2.2.1, nếu bạn muốn liên kết đến đối tượng Jeff Smith, bạn sẽ đưa vào tên đầy đủ của đối tượng đó: + Nếu bạn biết chắc chắn đối tượng mà mình muốn liên kết đến thuộc domain của mình thì bạn chỉ cần khai báo: Dim ent As New DirectoryEntry("LDAP:// CN=Jeff Smith,OU=Marketing,DC=fabrikam,DC=Com") + Nếu bạn biết đối tượng đó thuộc về máy chủ nào: Dim ent As New DirectoryEntry("LDAP:// server01/CN=Jeff Smith,OU=Marketing,DC=fabrikam,DC=Com") + Nếu bạn biết đối tượng đó thuộc về domain nào: Dim ent As New DirectoryEntry("LDAP:// fabrikam.com/CN=Jeff Smith,OU=Marketing,DC=fabrikam,DC=Com") Sau khi đã liên kết đến một đối tượng mong muốn, bạn có thể sử dụng các thông tin của chúng một cách tùy thích. Như với đối tượng người dùng là Jeff Smith, bạn có thể lấy số nhà, số điện thoại, nhóm làm việc,…của đối tượng này. Và để kết lại phần này chúng tôi muốn các bạn xem một ví dụ nữa, một ví dụ mà chúng tôi đã sử dụng để lấy về tên của các máy tính thuộc domain của mình: KH OA C NT T – Đ H KH TN Chương 5: Tìm hiểu System.DirectoryServices. 40 Dim ent As New DirectoryEntry(“LDAP: //khtn.com/CN=Computers,DC=khtn,DC=com”) Dim child As DirectoryEntry Dim strName As String For Each child In ent.Children strName = child.Name Next child KH OA C NT T – Đ H KH TN Chương 6: Ứng dụng và các chức năng của ứng dụng 41 Phần 3: Thiết kế và cài đặt ứng dụng Chương 6: Ứng dụng và các chức năng của ứng dụng 6.1. Giới thiệu chương trình Chương trình ShutdownTimer được xây dựng dưới dạng dịch vụ chạy trên Windows Server 2003 domain controller để shutdown các máy trong domain theo thời gian định trước. Đối với máy DC: chương trình có thể chạy trên hệ điều hành Windows 2000 Server và Windows Server 2003, Windows NT Server 4.0 từ SP4 trở lên. Đối với các máy trạm: chương trình có thể chạy trên Windows 2000 Professional , Windows XP, Windows NT WorkStation 4.0 từ SP4 trở lên. 6.2. Các lớp chính của chương trình Chương trình gồm các lớp chính sau: ● Lớp HenGioForm: Lớp này chứa form dùng để giao tiếp với người dùng và dịch vụ bên dưới. Người dùng sẽ thực hiện các thao tác hẹn giờ và chọn máy shutdown trên form này. Sau khi người dùng đã thực hiện xong các thao tác và bấm chọn nút đồng ý thì chương trình của ta sẽ thực hiện lấy các thông tin từ form ghi vào tập tin chứa các thông tin về thời gian và các máy shutdown. Đồng thời trong lớp này cũng sử dụng đối tượng ServiceController để điều khiển dịch vụ. Mỗi lần người dùng thực hiện một giờ hẹn mới, đối tượng này sẽ chịu trách nhiệm khởi động lại dịch vụ để dịch vụ cập nhật các thông tin shutdown mới. ● Lớp Service1: Đây là lớp chính của chương trình, được viết dưới dạng dịch vụ và kế thừa từ lớp System.ServiceProcess.ServiceBase. Lớp này định nghĩa chồng lại hai phương thức chính là OnStart và OnStop. KH OA C NT T – Đ H KH TN Chương 6: Ứng dụng và các chức năng của ứng dụng 42 _ Phương thức OnStop chỉ đơn giản là ghi vào evenlog một thông tin cho biết là dịch vụ đã được dừng. _ Phương thức OnStart: + Đọc các thông tin shutdown từ tập tin. + Sử dụng một đối tượng Timer để kiểm tra xem đã đến giờ hẹn hay chưa. Nếu đến giờ đã hẹn thì gọi hàm shutdown. ● Lớp ProjectInstaller: Được sử dụng để cài đặt và gỡ bỏ dịch vụ. 6.3. Lưu đồ hoạt động chính của ứng dụng Sau đây là lưu đồ mô tả hoạt động chính của chương trình: KH OA C NT T – Đ H KH TN Chương 6: Ứng dụng và các chức năng của ứng dụng 43 Hình 6.1 KH OA C NT T – Đ H KH TN Chương 6: Ứng dụng và các chức năng của ứng dụng 44 Ở đây, có lẽ chúng ta sẽ nói thêm cho rõ về phần kiểm tra xem đã đến giờ hẹn chưa. Khi người dùng kết thúc việc hẹn giờ, chương trình sẽ lấy các thông tin này ghi vào tập tin đồng thời kích hoạt dịch vụ hoạt động. Khi dịch vụ bắt đầu hoạt động nó sẽ đọc giờ hẹn ra và kích hoạt thành phần Timer hoạt động, thành phần này sẽ chịu trách nhiệm lấy giờ hệ thống sau mỗi phút, so sánh với giờ hẹn. Nếu đúng giờ hẹn sẽ gọi hàm thực hiện hành động đã được người sử dụng lựa chọn như shutdown, restart,… 6.4. Cách cài đặt và sử dụng ứng dụng 1. Chạy tập tin Setup.exe để cài đặt dịch vụ. Hình 6.2 2. Chọn thư mục để cài đặt dịch vụ. KH OA C NT T – Đ H KH TN Chương 6: Ứng dụng và các chức năng của ứng dụng 45 Hình 6.3 3. Trong quá trình cài đặt, bạn sẽ phải nhập tên tài khoản và mật mã của tài khoản mà dịch vụ sẽ chạy bên dưới tài khoản đó. Bạn phải đảm bảo là tài khoản của bạn phải thuộc nhóm quản trị. Chỉ khi nào tài khoản của bạn thuộc nhóm quản trị thì bạn mới có quyền shutdown các máy trong domain, do đó hãy cung cấp tên tài khoản và mật mã tài khoản một cách chính xác.. KH OA C NT T – Đ H KH TN Chương 6: Ứng dụng và các chức năng của ứng dụng 46 Hình 6.4 4. Kích chọn Close để hoàn tất quá trình cài đặt dịch vụ. Hình 6.5 5. Bạn có thể chạy chương trình bằng ba cách : _ Cách 1: chạy tập tin MyFormShutdown.exe trong thư mục vừa cài đặt. KH OA C NT T – Đ H KH TN Chương 6: Ứng dụng và các chức năng của ứng dụng 47 _ Cách 2: nhắp đôi chuột vào shortcut của chương trình vừa được tạo ra trên màn hình với tên mặc định là ShutdownTimer. _ Cách 3: vào Start à Programs để kích họat chương trình. Nếu bạn vừa cài đặt dịch vụ xong và đây là lần đầu tiên chạy ứng dụng, bạn sẽ nhận được một thông báo yêu cầu bạn đặt mật khẩu để bảo đảm an toàn cho chương trình của bạn. Hình 6.6 6. Kích OK để thực hiện đặt mật khẩu cho chương trình. Màn hình đặt mật khẩu xuất hiện. Hình 6.7 7. Kích chọn Đồng ý để trở về màn hình đăng nhập. KH OA C NT T – Đ H KH TN Chương 6: Ứng dụng và các chức năng của ứng dụng 48 Hình 6.8 * Tại đây, bạn có thể thực hiện đổi mật khẩu nếu muốn. Kích chọn Đổi mật khẩu để thực hiện đổi mật khẩu. 8. Nhập mật khẩu và kích chọn Đồng ý để vào màn hình hẹn giờ của chương trình. ● Thực hiện hẹn giờ và chọn hành động muốn thưc hiện vào giờ hẹn trong tab Hẹn giờ. KH OA C NT T – Đ H KH TN Chương 6: Ứng dụng và các chức năng của ứng dụng 49 Hình 6.9 Hẹn giờ có các tùy chọn sau: _ Hẹn một lần: hẹn giờ shutdown máy vào một thời điểm duy nhất của một ngày duy nhất. _ Hẹn lặp. + Mỗi ngày: hẹn giờ shutdown máy vào mỗi ngày + Các ngày trong tuần: hẹn giờ shutdown máy vào các thứ trong tuần. _ Bỏ hẹn: Hủy bỏ tất cả các thời gian đã hẹn, không hẹn giờ nữa. Chế độ shutdown có các tùy chọn sau: KH OA C NT T – Đ H KH TN Chương 6: Ứng dụng và các chức năng của ứng dụng 50 _ Shutdown. _ Forced Shutdown: Shutdown máy bất kể máy đang thực hiện công việc gì. _ Restart: Khởi động lại máy tính. _ Forced Restart: Khởi động lại máy tính bất kể máy đang thực hiện công việc gì. _ LogOff: Đăng xuất. _ Forced LogOff: Đăng xuất bất kể máy đang thực hiện công việc gì. ● Chọn các máy áp dụng trong tab Máy shutdown. KH OA C NT T – Đ H KH TN Chương 6: Ứng dụng và các chức năng của ứng dụng 51 Hình 6.10 Trong phần này, ứng dụng có hai tùy chọn cho bạn lựa chọn: _ Môi trường đơn: nếu chương trình của bạn chỉ áp dụng cho máy đơn cục bộ. _ Môi trường mạng: Nếu máy của bạn là DC cho một domain. Nếu máy của bạn là máy đơn, hoặc là máy mạng nhưng không phải là DC thì khi bạn chọn tùy chọn này bạn sẽ nhận được một thông báo lỗi. Trong môi trường mạng bạn sẽ chọn các máy để chương trình thực hiện hành động shutdown (restart, logoff,…) khi đến giờ hẹn. Bạn có thể chọn DC, cũng có thể chọn các máy trạm. KH OA C NT T – Đ H KH TN Chương 6: Ứng dụng và các chức năng của ứng dụng 52 Đối với các máy trạm, bạn có hai tùy chọn: + Tất cả: chương trình sẽ thực hiện shutdown tất cả các máy trạm đang họat động vào giờ hẹn. + Tùy chọn: chương trình chỉ thực hiện hành động shutdown đối với các máy trạm đã được bạn chọn vào giờ hẹn. 9. kích Đồng ý để bắt đầu hẹn giờ và kích hoạt chương trình. * Nếu bạn muốn hẹn giờ cho nhiều nhóm máy riêng biệt thì vẫn thao tác như với một nhóm máy ứng với mỗi nhóm VD: bạn hẹn cho nhóm 1 thời gian hẹn là thứ 2, 4, và 6, còn các máy áp dụng là tất cả các máy trạm. Bấm đồng ý để xác nhận. Tiếp tục hẹn cho nhóm 2 thời gian hẹn là mỗI ngày, còn máy áp dụng là một số máy trạm tùy chọn. Bấm đồng ý để xác nhận cho nhóm này. Đến đây thì xem như bạn đã hòan thành việc hẹn giờ cho hai nhóm riêng biệt. Bạn có thể sang tab “các nhóm đã hẹn” để xem lại thời gian mà mình đã hẹn cho các nhóm có đúng hay không. KH OA C NT T – Đ H KH TN Chương 6: Ứng dụng và các chức năng của ứng dụng 53 Hình 6.11 KH OA C NT T – Đ H KH TN Chương 7: Kết luận – Đánh giá – Hướng phát triển 54 Chương 7: Kết luận - Đánh giá – Hướng phát triển 7.1. Kết luận và đánh giá Ứng dụng đáp ứng đầy đủ các yêu cầu đặt ra cùng với các ưu và khuyết điểm tự nhận xét như sau: ● Ưu điểm: + Đơn giản, dễ sử dụng, giao diện thân thiện với người dùng. + Chức năng hẹn giờ linh hoạt giúp người sử dụng có thể dễ dàng chọn lựa được dạng giờ hẹn mong muốn.Cho phép hẹn giờ vào một ngày bất kì và hẹn lặp giờ vào mỗi ngày hay các thứ trong tuần. Chức năng này thật sự thích hợp cho các tổ chức, trung tâm có thời khóa biểu làm việc rõ ràng cụ thể. + Giao diện giao tiếp với người dùng hoàn toàn bằng tiếng Việt. + Hỗ trợ đa dạng hành động cho việc hẹn giờ. Ví dụ: Shutdown, ForcedShutdown, Restart, ForcedRestart, LogOff, ForcedLogOff. + Cho phép hẹn giờ tắt máy theo từng nhóm hay từng máy. + Chạy tốt trên Windows server 2003 domain controller và shutdown được một số hay tất cả các máy trên domain. + Để sử dụng chương trình bạn không cần phải cài đặt thêm bất cứ thứ gì trên các máy trạm. ● Nhược điểm: + Giao diện chương trình không mang tính mỹ thuật cao. + Không hiển thị thông báo khi tắt máy. + Chương trình chưa thật sự quan tâm nhiều lắm đến vấn đề bảo mật cho ứng dụng. KH OA C NT T – Đ H KH TN Chương 7: Kết luận – Đánh giá – Hướng phát triển 55 Ó Bảng so sánh các tính năng của chương trình với một số chưong trình đã có: Chức năng ShutdownTimer Shutdown Alarm Shutdown Or Restart now Shutdown Plus Remote Tiện ích shutdown của Windows Giao diện tiếng Việt x x - - - Tắt máy cục bộ x x x x x Tắt máy từ xa x - x x x Hẹn giờ tắt máy vào ngày, giờ cố định x x x x - Hẹn giờ tắt máy lặp lại vào mỗi ngày, mỗi thứ trong tuần x - x x - Không cần cài đặt chương trình trên các máy trạm x - x - x Hiển thị thông báo trước khi tắt. - x x x x Hẹn giờ tắt theo từng nhóm hoặc từng máy. x - - x - Có mật khẩu để bảo vệ chương trình x x - - - KH OA C NT T – Đ H KH TN Chương 7: Kết luận – Đánh giá – Hướng phát triển 56 7.2. Hướng phát triển + Thiết kế lại giao diện để giao diện có tính mỹ thuật và bắt mắt người sử dụng hơn. + Thêm một số chức năng phụ để chương trình thêm phong phú và đáp ứng được nhu cầu luôn luôn tăng của người sử dụng như: · Hiển thị thông báo trước khi thực hiện hành động shutdown, restart hay logoff. ● Đổ chuông hay phát tín hiệu khi đến giờ hẹn để báo sắp đến giờ hẹn. ● Cho phép hẹn giờ để mở nhạc hay chạy một file nào đó. ● Đặt chế độ theo dõi CPU để có thể shutdown, restart,… máy khi CPU rảnh rỗi trong một thời gian nào đó. ví dụ, khi CPU rảnh 99% trong 30 phút thì thực hiện shutdown máy,… + Cải thiện và thật sự quan tâm đến vấn đề bảo mật của ứng dụng. KH OA C NT T – Đ H KH TN Tài liệu tham khảo 57 TÀI LIỆU THAM KHẢO 1. Phạm Hoàng Dũng, Làm Chủ Windows Server 2003, 1, NXB Thống Kê, Số 21 Bùi Thị Xuân Q1_TP.HCM, 2003. 2. Tài liệu tham khảo điện tử MSDN 2004. 3. Webside: www.microsoft.com.

Các file đính kèm theo tài liệu này:

  • pdfUnlock-0012043_0012657.pdf