domain

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

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

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

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

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

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.

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.

Chương 1: Đặt vấn đề và giới thiệu đề tài

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?

1

Chương 1: Đặt vấn đề và giới thiệu đề tài

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.

2

Chương 1: Đặt vấn đề và giới thiệu đề tài

+ 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.

3

Chương 2: Tìm hiểu một số khái niệm liên quan đến đề tài

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?

4

Chương 2: Tìm hiểu một số khái niệm liên quan đến đề tài

● 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ó.

5

Chương 2: Tìm hiểu một số khái niệm liên quan đến đề tài

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.

6

Chương 2: Tìm hiểu một số khái niệm liên quan đến đề tài

● 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.

7

Chương 2: Tìm hiểu một số khái niệm liên quan đến đề tài

● 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.

8

Chương 3: Tìm hiểu ứng dụng dạng dịch vụ.

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

9

Chương 3: Tìm hiểu ứng dụng dạng dịch vụ.

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).

10

Chương 3: Tìm hiểu ứng dụng dạng dịch vụ.

● 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ô

11

Chương 3: Tìm hiểu ứng dụng dạng dịch vụ.

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.

12

Chương 3: Tìm hiểu ứng dụng dạng dịch vụ.

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

13

Chương 3: Tìm hiểu ứng dụng dạng dịch vụ.

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.

14

Chương 3: Tìm hiểu ứng dụng dạng dịch vụ.

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()

15

Chương 3: Tìm hiểu ứng dụng dạng dịch vụ.

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

16

Chương 3: Tìm hiểu ứng dụng dạng dịch vụ.

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.

17

Chương 3: Tìm hiểu ứng dụng dạng dịch vụ.

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.

18

Chương 3: Tìm hiểu ứng dụng dạng dịch vụ.

Đế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.

19

Chương 3: Tìm hiểu ứng dụng dạng dịch vụ.

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.

20

Chương 3: Tìm hiểu ứng dụng dạng dịch vụ.

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

21

Chương 3: Tìm hiểu ứng dụng dạng dịch vụ.

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.

22

Chương 4: Tìm hiểu về WMI (Windows Management Instrument).

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à

23

Chương 4: Tìm hiểu về WMI (Windows Management Instrument).

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,...

24

Chương 4: Tìm hiểu về WMI (Windows Management Instrument).

● 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

25

Chương 4: Tìm hiểu về WMI (Windows Management Instrument).

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ư

26

Chương 4: Tìm hiểu về WMI (Windows Management Instrument).

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.

27

Chương 4: Tìm hiểu về WMI (Windows Management Instrument).

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.

28

Chương 4: Tìm hiểu về WMI (Windows Management Instrument).

● 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ụ,....

29

Chương 4: Tìm hiểu về WMI (Windows Management Instrument).

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

30

Chương 4: Tìm hiểu về WMI (Windows Management Instrument).

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).

31

Chương 4: Tìm hiểu về WMI (Windows Management Instrument).

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.

32

Chương 4: Tìm hiểu về WMI (Windows Management Instrument).

+ 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.

33

Chương 4: Tìm hiểu về WMI (Windows Management Instrument).

+ 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

34

Chương 4: Tìm hiểu về WMI (Windows Management Instrument).

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.

35

Chương 5: Tìm hiểu System.DirectoryServices.

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

36

Chương 5: Tìm hiểu System.DirectoryServices.

Để 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:

37

Chương 5: Tìm hiểu System.DirectoryServices.

● 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:

38

Chương 5: Tìm hiểu System.DirectoryServices.

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:

39

Chương 5: Tìm hiểu System.DirectoryServices.

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

40

Chương 6: Ứng dụng và các chức năng của ứng dụng

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.

41

Chương 6: Ứng dụng và các chức năng của ứng dụng

_ 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:

42

Chương 6: Ứng dụng và các chức năng của ứng dụng

Hình 6.1

43

Chương 6: Ứng dụng và các chức năng của ứng dụng

Ở đâ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ụ.

44

Chương 6: Ứng dụng và các chức năng của ứng dụng

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..

45

Chương 6: Ứng dụng và các chức năng của ứng dụng

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.

46

Chương 6: Ứng dụng và các chức năng của ứng dụng

_ 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.

47

Chương 6: Ứng dụng và các chức năng của ứng dụng

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ờ.

48

Chương 6: Ứng dụng và các chức năng của ứng dụng

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:

49

Chương 6: Ứng dụng và các chức năng của ứng dụng

_ 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.

50

Chương 6: Ứng dụng và các chức năng của ứng dụng

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.

51

Chương 6: Ứng dụng và các chức năng của ứng dụng

Đố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.

52

Chương 6: Ứng dụng và các chức năng của ứng dụng

Hình 6.11

53

Chương 7: Kết luận - Đánh giá - Hướng phát triển

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.

54

Chương 7: Kết luận - Đánh giá - Hướng phát triển

Ó 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ó:

Tiện ích

Shutdown Shutdown

Shutdown Shutdown shutdown

Chức năng Or Restart Plus

Timer Alarm của

now Remote

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

x x x x -

ngày, giờ cố định

Hẹn giờ tắt máy lặp

lại vào mỗi ngày, x - x x -

mỗi thứ trong tuần

Không cần cài đặt

chương trình trên x - x - x

các máy trạm

Hiển thị thông báo

- x x x x

trước khi tắt.

Hẹn giờ tắt theo

từng nhóm hoặc x - - x -

từng máy.

Có mật khẩu để bảo

x x - - -

vệ chương trình

55

Chương 7: Kết luận - Đánh giá - Hướng phát triển

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.

56

Tài liệu tham khảo

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.

57

Bạn đang đọc truyện trên: AzTruyen.Top

Tags: #domain