C# 使用installutil从具有多个服务的可执行文件安装单个服务
我创建了一个可执行文件,该文件定义了2个服务,其步骤类似于上一篇文章: 在本例中,如果使用installutil.exe安装该服务,它看起来会安装所有定义的服务(本例中为2)。在这个实现中,有没有办法让installutil.exe只安装我在命令行中指定的服务(例如installutil.exe/service=Service1),而不是安装定义的所有服务C# 使用installutil从具有多个服务的可执行文件安装单个服务,c#,.net,windows,service,C#,.net,Windows,Service,我创建了一个可执行文件,该文件定义了2个服务,其步骤类似于上一篇文章: 在本例中,如果使用installutil.exe安装该服务,它看起来会安装所有定义的服务(本例中为2)。在这个实现中,有没有办法让installutil.exe只安装我在命令行中指定的服务(例如installutil.exe/service=Service1),而不是安装定义的所有服务 谢谢 是的。您可以从项目安装程序的上下文访问命令行,并仅运行所需的安装程序 例如,如果我覆盖项目安装程序上的安装,那么我可以检查命令行以查看
谢谢 是的。您可以从项目安装程序的
上下文
访问命令行,并仅运行所需的安装程序
例如,如果我覆盖项目安装程序上的安装,那么我可以检查命令行以查看要执行的操作
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
请务必注意,您的命令行参数需要放在包含服务安装程序的程序集之前。非常好用,谢谢!我要做的唯一额外的事情是确保我也用基本相同的代码覆盖了“Uninstall”方法,这有助于选择性地安装和卸载服务。实际上,@John似乎还有另一个问题。如果这是一个单独的问题,请告诉我。如果我采用这种方法,并且只在给定的服务器上安装其中一个服务,那么启动服务时执行的代码始终是入口点中第一个服务的代码,而不是另一个服务的代码,无论我安装的是什么服务。我还不知道为什么会这样。我还需要做些什么来确保正确服务的代码运行吗?