使用installutil从具有多个服务的可执行文件安装单个服务

我创build了一个具有2个服务定义的可执行文件,按照以下步骤执行: 可以在一个Windows可执行文件中托pipe多个服务

在这种情况下,如果我使用installutil.exe来安装服务,它看起来像安装所有定义的服务(在这种情况下是2)。 有了这个实现,有没有办法让installutil.exe只安装我在命令行指定的服务(比如installutil.exe / service = Service1),而不是定义的所有服务?

谢谢!

是。 您可以从项目安装程序的Context访问命令行,并只运行所需的安装程序。

例如,如果我重写了项目安装程序上的安装,则可以检查命令行来查看要执行的操作。

 public override void Install(IDictionary stateSaver) { var foo = Context.Parameters["foo"]; Console.WriteLine($"Foo is {foo}"); if (foo.Equals("bar")) { Console.WriteLine("Installing Service1"); this.Installers.Remove(serviceInstaller2); base.Install(stateSaver); } else if (foo.Equals("baz")) { Console.WriteLine("Installing Service2"); this.Installers.Remove(serviceInstaller1); base.Install(stateSaver); } } 

然后我调用这样的installutil exe文件:

 installutil /foo="bar" WindowsService1.exe 

请务必注意,您的命令行参数需要放在包含服务安装程序的程序集之前。