2012-08-02 35 views
8

Tôi đang cố tạo dịch vụ cửa sổ bằng TopShelf. Mọi thứ hoạt động tốt với một phiên bản của dịch vụ. Tuy nhiên, khi tôi sao chép toàn bộ thư mục dịch vụ đến một vị trí khác và sau đó chạy cài đặt tại vị trí nó chỉ bị treo khi "khởi động".TopShelf cài đặt nhiều dịch vụ giống nhau trên cùng một máy

Tôi chỉ định tên máy tính, mô tả, tên hiển thị dựa trên giá trị trong tệp cấu hình để không có xung đột đặt tên.

+0

Hãy tham gia danh sách gửi thư với điều này và bao gồm đầu ra nhật ký nếu bạn có thể. https://groups.google.com/forum/#!forum/topshelf-discuss. Điều này sẽ khó để tìm ra trên SO; tuy nhiên, bạn có thể đặt tên "instance" cho phép bạn chạy hai dịch vụ giống nhau. – Travis

+0

Bạn có chắc chắn rằng servicename AND displayname là duy nhất không? Đã thử cài đặt hai dịch vụ với servicenames duy nhất nhưng sử dụng cùng một tên hiển thị và nó đã không làm việc quá. – Bomberlt

Trả lời

22

Đó là dịch vụ instancename mà bạn cần phân biệt.

Từ documentation:

service.exe [động từ] [-option: value] [-switch]

cài đặt Cài đặt các dịch vụ

-instance Một ví dụ tên nếu đăng ký dịch vụ nhiều lần

Vì vậy, bạn có thể sử dụng:

service.exe install -instance:FirstInstanceOfMyService 

service.exe install -instance:SecondInstanceOfMyService 
5

Nếu những gì bạn muốn là để thiết lập tên ví dụ dịch vụ trong tập tin cấu hình, bạn có thể đặt tên ví dụ programatically như thế này:

var instanceName = ConfigurationManager.AppSettings["Instance"]; 
HostFactory.Run(hostConfigurator => 
{  
    ... 
    hostConfigurator.SetDisplayName("My service"); 
    hostConfigurator.SetDescription("My service that does something"); 
    hostConfigurator.SetServiceName("MyService"); 
    hostConfigurator.SetInstanceName(instanceName); 
} 

Vì vậy, trong thời gian cài đặt bạn chỉ chạy

MyService.exe install 
Các vấn đề liên quan