그래서 우리는 클라이언트 응용 프로그램에 데이터를 공급하는 Windows 서비스를 생성했으며 모든 것이 잘 진행되고 있습니다. 클라이언트는 동일한 서버에서 실행되고 별도의 데이터베이스를 가리 키도록 구성된이 서비스의 두 인스턴스가 필요한 재미있는 구성 요청을 내놓았습니다.
지금까지 나는 이런 일이 일어나지 않았고 동료 stackoverflow 구성원이 이유에 대한 힌트를 줄 수 있기를 바랐습니다.
현재 설정 :
Windows 서비스가 포함 된 프로젝트를 설정했습니다. 이제부터는 AppService라고 부르겠습니다. App.config의 키를 기반으로 서비스 이름을 설정하는 사용자 지정 설치 단계를 처리하는 ProjectInstaller.cs 파일은 다음과 같습니다. :
this.serviceInstaller1.ServiceName = Util.ServiceName;
this.serviceInstaller1.DisplayName = Util.ServiceName;
this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
이 경우 Util은 구성 파일에서 서비스 이름을로드하는 정적 클래스입니다.
여기서부터 나는 두 서비스를 설치하기 위해 두 가지 다른 방법을 시도했지만 둘 다 동일한 방식으로 실패했습니다.
첫 번째 방법은 단순히 서비스의 첫 번째 복사본을 설치하고 설치된 디렉터리를 복사하고 이름을 바꾼 다음 앱 구성을 수정하여 원하는 서비스 이름을 변경 한 후 다음 명령을 실행하는 것입니다.
InstallUtil.exe /i AppService.exe
그래도 작동하지 않을 때 두 번째 설치 프로그램 프로젝트를 만들고 구성 파일을 편집하고 두 번째 설치 프로그램을 만들려고했습니다. 설치 프로그램을 실행했을 때 제대로 작동했지만 서비스가 services.msc에 표시되지 않았으므로 두 번째 설치된 코드베이스에 대해 이전 명령을 실행했습니다.
두 번 모두 InstallUtil에서 다음 출력을 받았습니다 (관련 부품 만 해당).
트랜잭션 된 설치 실행.
설치의 설치 단계를 시작합니다.
서비스 App Service Two 설치 중 ... Service App Service Two가 성공적으로 설치되었습니다. 로그 애플리케이션에서 EventLog 소스 App Service Two를 만드는 중 ...
설치 단계 중에 예외가 발생했습니다. System.NullReferenceException : 개체 참조가 개체의 인스턴스로 설정되지 않았습니다.
설치의 롤백 단계가 시작됩니다.
소스 App Service Two의 이벤트 로그를 이전 상태로 복원합니다. 서비스 앱 서비스 2가 시스템에서 제거되고 있습니다 ... 서비스 앱 서비스 2가 시스템에서 성공적으로 제거되었습니다.
롤백 단계가 성공적으로 완료되었습니다.
거래 된 설치가 완료되었습니다. 설치에 실패했으며 롤백이 수행되었습니다.
긴 게시물에 대해 죄송합니다. 관련 정보가 충분한 지 확인하고 싶었습니다. 지금까지 저를 당황하게 만든 부분은 서비스 설치가 성공적으로 완료되고 NullReferenceException이 발생하는 것처럼 보이는 EventLog 소스를 생성 한 후에야 만 서비스 설치가 완료되었다는 것입니다. 그래서 누군가 내가 뭘 잘못하고 있는지 알고 있거나 더 나은 접근 방식을 가지고 있다면 대단히 감사하겠습니다.
http://journalofasoftwaredev.wordpress.com/2008/07/16/multiple-instances-of-same-windows-service/
. installutil을 실행할 때 원하는 서비스 이름을 가져 오기 위해 설치 프로그램에 코드를 삽입 할 수 있습니다.