669
Chương 17: Sự hòa hợp với môi trường Windows
Như đã đề cập trong mục 17.5, bạn không thể chạy các lớp dịch vụ một cách trực tiếp. Vì dịch
vụ được tích hợp mức cao với hệ điều hành Windows và thông tin được giữ trong Registry nên
dịch vụ phải được cài đặt trước khi chạy.
Nếu đang sử dụng Microsoft Visual Studio .NET, bạn có thể tạo một bộ cài đặt cho dịch vụ
một cách tự động bằng cách nhắp phải vào khung thiết kế của lớp dịch vụ và chọn Add
Installer từ menu ngữ cảnh. Bộ cài đặt này có thể được gọi bởi các dự án triển khai hoặc công
cụ Installutil.exe để cài đặt dịch vụ.
Bạn cũng có thể tự tạo một bộ cài đặt cho dịch vụ Windows theo các bước sau:
1. Tạo một lớp thừa kế từ lớp
Installer
.
2. Áp dụng đặc tính
System.ComponentModel.RunInstallerAttribute(true)
cho lớp cài
đặt.
3. Trong phương thức khởi dựng của lớp cài đặt, tạo một thể hiện của lớp
System.ServiceProcess.ServiceProcessInstaller
. Thiết lập các thuộc tính
Account
,
UserName
, và
Password
của đối tượng
ServiceProcessInstaller
để cấu hình tài khoản
mà dịch vụ sẽ chạy.
4. Cũng trong phương thức khởi dựng của lớp cài đặt, tạo một thể hiện của lớp
System.ServiceProcess.ServiceInstaller
cho mỗi dịch vụ cần cài đặt. Sử dụng các
thuộc tính của đối tượng
ServiceInstaller
để cấu hình các thông tin về mỗi dịch vụ,
bao gồm:
•
ServiceName
—Chỉ định tên mà Windows sử dụng để nhận dạng dịch vụ. Tên
này phải trùng với giá trị được gán cho thuộc tính
ServiceBase.ServiceName
.
•
DisplayName
—Chỉ định tên thân thiện cho dịch vụ.
•
StartType
—Sử dụng các giá trị thuộc kiểu liệt kê
System.ServiceProcess.
ServiceStartMode
để điều khiển việc dịch vụ được khởi động tự động hay
bằng tay, hay bị vô hiệu.
•
ServiceDependsUpon
—lấy một mảng kiểu chuỗi chứa tên các dịch vụ phải
được chạy trước khi dịch vụ hiện hành chạy.
5. Sử dụng thuộc tính
Installers
thừa kế từ lớp cơ sở
Installer
để lấy một đối tượng
System.Configuration.Install.InstallerCollection
. Thêm các đối tượng
ServiceProcessInstaller
và tất cả các đối tượng
ServiceInstaller
vào tập hợp này.
Lớp
ServiceInstallerExample
dưới đây là một bộ cài đặt cho lớp
ServiceExample
trong mục
17.5. Dự án mẫu cho mục này chứa cả hai lớp
ServiceExample
và
ServiceInstallerExample
,
và tạo ra file thực thi ServiceInstallerExample.exe.
using System.ServiceProcess;
using System.Configuration.Install;
using System.ComponentModel;
[RunInstaller(true)]
public class ServiceInstallerExample : Installer {