2012-08-31 5 views
0

동일한 서비스를 한 대의 컴퓨터에 여러 번 설치할 수 있어야합니다. 내가 일하는 부분! 그러나 ServiceName도 달라야합니다. 그 부분은 그렇지 않습니다. 다음은 ServiceName이 제대로 변경되지 않습니다.

내 Installer.cs 내 코드입니다 :

[RunInstaller(true)] 
public partial class ProjectInstaller : System.Configuration.Install.Installer 
{ 
    public ProjectInstaller() 
    { 
     InitializeComponent(); 
    } 

    public override void Install(IDictionary stateSaver) 
    { 
     RetrieveServiceName(); 
     base.Install(stateSaver); 
    } 

    public override void Uninstall(IDictionary savedState) 
    { 
     RetrieveServiceName(); 
     base.Uninstall(savedState); 
    } 

    private void RetrieveServiceName() 
    { 
     var serviceName = Context.Parameters["servicename"]; 
     if(!string.IsNullOrEmpty(serviceName)) 
     { 
      auditStreamServiceInstaller.ServiceName = serviceName; 
      auditStreamServiceInstaller.DisplayName = serviceName; 
     } 
    } 
} 

나는 지금

C:\Windows\Microsoft.Net\Framework\v4.0.30319> installutil /servicename="AuditStream-NW" d:AuditStreamService.exe 

내가 installlog 보면 서비스를 설치하려면 다음 cmd를 사용

Affected parameters are: 
    logtoconsole = 
    logfile = C:\AuditStreams\NW\AuditStreamService.InstallLog 
    assemblypath = C:\AuditStreams\NW\AuditStreamService.exe 
    servicename = AuditStream-NW 
에게

이 정보는 정확하지만 내 서비스의 내 OnStart에는 ServiceName을 출력하는 행이 있습니다. 개인 로그 파일. 하지만 그것은 ServiceName은 항상 AuditStreamService

것을 말한다 나는이 경우 auditstream은-NW 말 그 ... 사람이 내가 잘못있어 무엇을 볼 수있는 기대했다

?

EXTRA : 각 서비스는 또한 메모리 맵 파일 생성, 원래 나는 그것이 설정이 아닌 지속적인 가상 MMF의 이름이 설정에서 결정되는 (항상 "AuditStream-" + HubName이었다 있도록했기 때문에 나는이 이름이 다른 원하는 이유는 파일)하지만 외부 프로그램은 이제 mmf를 읽음으로써 서비스가 무엇을하는지 모니터링하지만 서비스 구성 파일을 읽는 것 외에도 외부 응용 프로그램은 mmf의 이름을 알지 못합니다. 제 목표는 모든 이름을 동일하게 만드는 것입니다, ServiceName = MMF Name = ServiceDisplayName.

+0

실제로 (services.msc 확인) 무엇이 설치 되나요? 제대로 설치되고 있지만 로그 라인이 잘못된 위치에서 ServiceName을 얻고 있습니다. –

+0

Services.msc 내에 AuditStream-NW로 나열되어 있습니다.하지만이 이름이 표시 이름이라고 생각했습니다. – Zholen

답변

0

Ok 그래서 내 설치 프로세스가 좋았으므로 OnStart() 내 this.ServiceName 변수를 사용할 수 없습니다. 설치시 선택한 이름이 아니라 일반 기본 이름을 항상 반환하므로 OnStart() 내에서 this.ServiceName 변수를 사용할 수 없습니다. 다음 코드는 내 실제 이름을 얻기 위해 사용 된 코드입니다.

int myPid = Process.GetCurrentProcess().Id; 
var services = ServiceController.GetServices(); 
foreach (var service in services) 
{ 
    ManagementObject wmiService = new ManagementObject("Win32_Service.Name='" + service.ServiceName + "'"); 
    wmiService.Get(); 
    if (Convert.ToInt32(wmiService["ProcessId"]) == myPid) 
     myServiceName = service.ServiceName; 
} 
관련 문제