Tôi đang cố gắng xây dựng một số dịch vụ Windows để thực hiện những việc khác nhau. Ví dụ, tôi cần các dịch vụ Windows mà sẽ:Nhiều dịch vụ Windows trong một exe
- Gửi báo cáo hàng ngày qua email
- Định kỳ dọn dẹp một số thông tin được lưu trữ mỗi 30 phút
- , vv
Nhiệm vụ tôi cần các cửa sổ dịch vụ để làm là khác biệt vì vậy tôi không thực sự thích ý tưởng của việc có tất cả trong một dịch vụ.
Những gì tôi đã có cho đến nay là một dự án trong Visual Studio 2008. Tôi đã tạo ra một dịch vụ cửa sổ, tôi đã thiết lập một bộ đếm thời gian trên sự kiện OnStart (nó chỉ ghi vào một tập tin văn bản mỗi 5 giây cho Mục đích thử nghiệm). Sau đó tôi đã thêm một trình cài đặt vào dự án và khi tôi chạy InstallUtil.exe, mọi thứ đều hoạt động tốt.
Sự cố xảy ra khi tôi thêm dịch vụ cửa sổ thứ hai vào cùng một dự án. Tôi thiết lập mã OnStart một lần nữa, với cùng một thông tin đăng nhập (hơi khác một chút để tôi có thể biết dịch vụ nào đang ghi vào nhật ký). Với dịch vụ cửa sổ thứ hai, tôi đã thay đổi sự kiện chính trong Program.cs từ:
static void Main(string[] args)
{
ServiceBase[] ServicesToRun = new ServiceBase[]
{
new Service1()
};
ServiceBase.Run(ServicesToRun);
}
tới:
static void Main(string[] args)
{
ServiceBase[] ServicesToRun = new ServiceBase[]
{
new Service1(),
new Service2()
};
ServiceBase.Run(ServicesToRun);
}
Tại thời điểm này, không có lỗi thời gian biên dịch, nhưng dịch vụ Service2 không bao giờ làm bất cứ điều gì ... nhiệm vụ đăng nhập không bao giờ cháy.
Tôi đã thu hẹp nó xuống thực tế là dịch vụ thứ hai không có "Trình cài đặt" được liên kết với nó. Sau đó tôi đã cố gắng thêm Trình cài đặt theo cách tôi đã thực hiện với dịch vụ đầu tiên (nghĩa là, nhấp chuột phải vào trình thiết kế dịch vụ và nhấp vào "Thêm trình cài đặt"). Bây giờ, khi tôi đi đến tệp ProjectInstaller.cs, có một serviceInstaller khác ở đó (serviceInstaller2).
Bây giờ khi tôi xây dựng dự án và cố gắng cài đặt các dịch vụ, và tôi đi đến "Dịch vụ" cửa sổ bảng điều khiển, và tôi cố gắng để bắt đầu Service1, tôi nhận được thông báo lỗi sau:
của Windows không thể khởi động dịch vụ Service1 trên máy tính cục bộ.
Lỗi 1083: Chương trình thực thi dịch vụ này được định cấu hình để chạy không thực hiện dịch vụ.
Tôi nhận được thông báo lỗi tương tự nếu tôi cố gắng khởi động Service2 (ngoại trừ thông báo lỗi xác định Service2, tất nhiên).
Có điều gì tôi thiếu để nhận hai dịch vụ chạy từ một exe không?
Có bất kỳ lý do cụ thể khác hơn là "tôi muốn" mà bạn cần phải có các dịch vụ trong một tệp thực thi duy nhất? Thông thường, mô đun sẽ thích hợp hơn, nhưng bạn có thể có tình tiết giảm nhẹ yêu cầu khác. – bsneeze
Lý do thực sự duy nhất là dễ cài đặt và triển khai. Tất cả các "dịch vụ" là khá nhanh chóng một phần tắt chức năng, vì vậy tôi không muốn phải cài đặt x số cửa sổ dịch vụ cho các mảnh nhỏ của mã. –
@pyrochild - Tôi tự tin có nhiều lý do để gắn kết nhiều dịch vụ trong một hội đồng duy nhất. Bây giờ tôi làm việc, chúng tôi sử dụng những con thú của thiết kế đó trên cơ sở mỗi khách hàng - nó làm cho phần mềm thử nghiệm tương tác với những dịch vụ đó một cách dễ dàng. – Hardryv