我创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
请务必注意,您的命令行参数需要放在包含服务安装程序的程序集之前。