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

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

pdf64 trang | Chia sẻ: maiphuongdc | Lượt xem: 1526 | Lượt tải: 2download
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:

  • pdf0012043_0012657.pdf