Vì vậy, chúng tôi đã tạo ra một dịch vụ windows để cung cấp dữ liệu cho ứng dụng khách của chúng tôi và mọi thứ đang diễn ra rất tốt. Máy khách đã đưa ra một yêu cầu cấu hình thú vị yêu cầu hai phiên bản của dịch vụ này chạy trên cùng một máy chủ và được định cấu hình để trỏ đến các cơ sở dữ liệu riêng biệt.
Cho đến nay tôi vẫn chưa thể làm điều này xảy ra và hy vọng các thành viên stackoverflow đồng nghiệp của tôi có thể đưa ra một số gợi ý về lý do tại sao.
Thiết lập hiện tại:
Tôi đã thiết lập dự án có chứa dịch vụ windows, từ giờ chúng tôi sẽ gọi nó là AppService và tệp ProjectInstaller.cs xử lý các bước cài đặt tùy chỉnh để đặt tên dịch vụ dựa trên một khóa trong App.config như vậy :
this.serviceInstaller1.ServiceName = Util.ServiceName;
this.serviceInstaller1.DisplayName = Util.ServiceName;
this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
Trong trường hợp này, Util chỉ là một lớp tĩnh có thể tải tên dịch vụ từ tệp cấu hình.
Từ đây trở đi, tôi đã thử hai cách khác nhau để cài đặt cả hai dịch vụ và cả hai đều không thành công theo cách giống nhau.
Cách đầu tiên là chỉ cần cài đặt bản sao đầu tiên của dịch vụ, sao chép thư mục đã cài đặt và đổi tên nó, sau đó chạy lệnh sau sau khi sửa đổi cấu hình ứng dụng để thay đổi tên dịch vụ mong muốn:
InstallUtil.exe /i AppService.exe
Khi điều đó không hiệu quả, tôi đã cố gắng tạo dự án trình cài đặt thứ hai, chỉnh sửa tệp cấu hình và xây dựng trình cài đặt thứ hai. Khi tôi chạy trình cài đặt, nó hoạt động tốt nhưng dịch vụ không hiển thị trong services.msc vì vậy tôi đã chạy lệnh trước đó đối với cơ sở mã được cài đặt thứ hai.
Cả hai lần tôi đều nhận được kết quả sau từ InstallUtil (chỉ các phần có liên quan):
Đang chạy một cài đặt đã giao dịch.
Bắt đầu giai đoạn Cài đặt của cài đặt.
Cài đặt dịch vụ App Service Two ... Service App Service Two đã được cài đặt thành công. Tạo EventLog source App Service Two in log Ứng dụng ...
Đã xảy ra ngoại lệ trong giai đoạn Cài đặt. System.NullReferenceException: Tham chiếu đối tượng không được đặt thành một thể hiện của đối tượng.
Giai đoạn khôi phục cài đặt đang bắt đầu.
Khôi phục nhật ký sự kiện về trạng thái trước đó cho Dịch vụ ứng dụng nguồn Hai. Dịch vụ Ứng dụng Dịch vụ Hai đang bị xóa khỏi hệ thống ... Ứng dụng Dịch vụ Dịch vụ Hai đã được xóa thành công khỏi hệ thống.
Giai đoạn khôi phục đã hoàn tất thành công.
Quá trình cài đặt được giao dịch đã hoàn tất. Quá trình cài đặt không thành công và quá trình khôi phục đã được thực hiện.
Xin lỗi vì bài viết dài dòng, muốn đảm bảo có đủ thông tin liên quan. Phần mà cho đến nay tôi vẫn băn khoăn là nó nói rằng quá trình cài đặt dịch vụ hoàn tất thành công và chỉ sau khi nó tạo nguồn EventLog mà NullReferenceException dường như bị ném. Vì vậy, nếu ai đó biết tôi đang làm gì sai hoặc có cách tiếp cận tốt hơn thì sẽ được đánh giá cao.
http://journalofasoftwaredev.wordpress.com/2008/07/16/multiple-instances-of-same-windows-service/
. Bạn có thể chèn mã vào trình cài đặt để lấy tên dịch vụ mà bạn muốn khi chạy installutil.