MỤC LỤC
Trang
Phần 1: M ở Đầu
Chương 1: ặtvấn đềvà giới thiệu đềtài . 1
1.1. Giới thiệu đềtài . 1
2.1. Cácch ương trình đã có . 2
Phần 2: Cơsởlý thuyết
Chương 2:Tìm hiểumộtsố 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 íchcủ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 ứngdụng dạng dịch vụ . 9
3.2. Cơ chếhoạt động củacá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ịchvụ trong .NET Framework . 12
3.4.1. Cácl ớ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 ứngdụng dịch vụvà các ứng dụng .NET
Framework khác. . 21
Chương 4:Tìm hiểuvềWMI (WindowsManagementInstrument) . 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 quanvề WMI. 23
4.2. Kiến trúc WMI. 25
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ếtscript 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ácl ớ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.DirectoryServicesvào ứng dụng . 36
5.2.2. Liênkếtvàsửdụng các đốitượ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 ứngdụng.
Chương 6: Ứng dụng và các chức năngcủa ứng dụng. 41
6.1. Giới thiệu chương trình . 41
6.2. Cácl ớp chính của chương trình . 41
6.3. Lưu đồhọat động chính của ứngdụng . 42
6.4. Cách cài đặtvàsửdụng ứngdụng . 44
Phần 4: Kết luận
Chương 7:Kếtluậ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
64 trang |
Chia sẻ: maiphuongdc | Lượt xem: 1607 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Luận văn 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, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
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ó
Các file đính kèm theo tài liệu này:
- 0012043_0012657.pdf