Installing multiple instances of the same windows service on a server

前端 未结 10 1723
深忆病人
深忆病人 2020-12-07 08:21

So we\'ve produced a windows service to feed data to our client application and everything is going great. The client has come up with a fun configuration request that requ

10条回答
  •  被撕碎了的回忆
    2020-12-07 09:05

    I didn't have much luck with the above methods when using our automated deployment software to frequently install/uninstall side-by-side windows services, but I eventually came up with the following which allows me to pass in a parameter to specify a suffix to the service name on the command line. It also allows the designer to function properly and could easily be adapted to override the entire name if necessary.

    public partial class ProjectInstaller : System.Configuration.Install.Installer
    {
      protected override void OnBeforeInstall(IDictionary savedState)
      {
        base.OnBeforeInstall(savedState);
        SetNames();
      }
    
      protected override void OnBeforeUninstall(IDictionary savedState)
      {
        base.OnBeforeUninstall(savedState);
        SetNames();
      }
    
      private void SetNames()
      {
        this.serviceInstaller1.DisplayName = AddSuffix(this.serviceInstaller1.DisplayName);
        this.serviceInstaller1.ServiceName = AddSuffix(this.serviceInstaller1.ServiceName);
      }
    
      private string AddSuffix(string originalName)
      {
        if (!String.IsNullOrWhiteSpace(this.Context.Parameters["ServiceSuffix"]))
          return originalName + " - " + this.Context.Parameters["ServiceSuffix"];
        else
          return originalName;
      }
    }
    

    With this in mind, I can do the following: If I've called the service "Awesome Service" then I can install a UAT verison of the service as follows:

    InstallUtil.exe /ServiceSuffix="UAT" MyService.exe

    This will create the service with the name "Awesome Service - UAT". We've used this to run DEVINT, TESTING and ACCEPTANCE versions of the same service running side-by-side on a single machine. Each version has its own set of files/configs - I haven't tried this to install multiple services pointing at the same set of files.

    NOTE: you have to use the same /ServiceSuffix parameter to uninstall the service, so you'd execute the following to uninstall:

    InstallUtil.exe /u /ServiceSuffix="UAT" MyService.exe

提交回复
热议问题