단일 Windows 실행 파일에서 여러 서비스를 호스팅 할 수 있습니까?
-
18-09-2019 - |
문제
내 질문은 본질적으로 다음과 동일하지만 대답은 저를 도와주지 않았습니다.
.NET Windows Service- 하나의 프로젝트의 여러 서비스
기본적으로 3 가지 서비스가 있습니다. "Service1", "Service"및 "Service3"이라고합니다.
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new Service1("Service1"),
new Service2("Service2"),
new Service3("Service3")
};
ServiceBase.Run(ServicesToRun);
또한 각 서비스에 대해 해당 ServiceInstaller.servicename = "Servicex"가있는 설치 프로그램 클래스가 있습니다.
installUtil을 사용하면 서비스 관리자에 3 개의 서비스가 모두 표시됩니다. 그러나 내가 그들을 시작할 때 (어느 것 또는 전부) 첫 번째 ( "Service1") 만 실행 중입니다.
나는 이것이 사소하다는 것을 알고 있으며 아마도 각각에 대해 다른 설치 프로그램 프로젝트를 가질 수 있지만 내 경우에는 하나만 사용하는 것이 의미 적으로 더 합리적입니다.
당신의 도움에 감사드립니다
감사합니다 Venu
해결책
각 서비스에 프로젝트 설치 프로그램을 사용하는 3 개의 서비스 프로젝트 (아래)를 만들었습니다. 그런 다음 서비스 관리자에 서비스를 설치하는 설치 프로그램 프로젝트를 추가했습니다. 여기 내 워크 플로가 있습니다.
- Visual Studio 2008에서 솔루션에서 3 개의 서비스를 만듭니다. 각 서비스를 Service1, Service2 및, Service3로 명명하십시오. (속성 창에서 실제 서비스 이름을 해당 이름으로 변경해야합니다.)
- 이 솔루션에 설치 프로그램 프로젝트를 추가했습니다.
- 세 서비스 프로젝트에서 프로젝트 출력을 설치 프로그램 프로젝트에 추가했습니다.
- 서비스 관리자에 서비스를 설치하기 위해 설치 프로그램의 세 서비스 모두에 대한 사용자 정의 작업이 추가되었습니다.
- 제작 및 설치.
서비스 관리자에서 세 가지 서비스를 제공합니다 : Service1, Service2 및 Service3
즐기다!
http://code.google.com/p/multi-service-install/
편집하다:
저장소의 코드를 업데이트하여 하나의 실행 가능이지만 두 개의 서비스를 제공했습니다. 각 서비스는 자체 이름과 시작/중지 기능을 갖춘 서비스 관리자에게 설치됩니다. 이것이 당신이 원하는 것 같아요, 맞습니까? 여기에 내가 한 일은 다음과 같습니다.
- 서비스 프로젝트를 만들었습니다.
- 동일한 프로젝트에 두 번째 서비스를 추가했습니다 (고유 한 서비스 이름).
- 서비스 (Servicea 및 ServiceB)에 설치 프로그램이 추가되었습니다.
- ProjectInstaller.designer.vb 파일에서 me.installers.addrange 라인을 변경하여 두 서비스 설치자를 모두 표시했습니다. (ME.ServiceInstaller1, ME.ServiceInstaller2)
- 메인 서비스의 주요 진입 점 (내 경우 Servicea)에서 Servicestorun 변수를 실행하려는 모든 서비스 (Servicea 및 ServiceB)를 포함하는 서비스베이스 배열로 설정했습니다. 서비스 관리자가 여기서 인수의 수를 기반으로 속성을 설정하므로 동일한 EXE의 여러 인스턴스를 허용하거나 단일 인스턴스 만 허용 할 때 중요한 단계입니다.
- 설치 프로그램 프로젝트를 추가하고 서비스 출력을 사용하십시오.
- 서비스의 출력을 사용하여 사용자 정의 작업을 추가하십시오.
코드는 위와 같은 링크에서 여전히 다운로드 할 수 있습니다.
감사!