Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用installutil从具有多个服务的可执行文件安装单个服务_C#_.net_Windows_Service - Fatal编程技术网

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

C# 使用installutil从具有多个服务的可执行文件安装单个服务,c#,.net,windows,service,C#,.net,Windows,Service,我创建了一个可执行文件,该文件定义了2个服务,其步骤类似于上一篇文章: 在本例中,如果使用installutil.exe安装该服务,它看起来会安装所有定义的服务(本例中为2)。在这个实现中,有没有办法让installutil.exe只安装我在命令行中指定的服务(例如installutil.exe/service=Service1),而不是安装定义的所有服务 谢谢 是的。您可以从项目安装程序的上下文访问命令行,并仅运行所需的安装程序 例如,如果我覆盖项目安装程序上的安装,那么我可以检查命令行以查看

我创建了一个可执行文件,该文件定义了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似乎还有另一个问题。如果这是一个单独的问题,请告诉我。如果我采用这种方法,并且只在给定的服务器上安装其中一个服务,那么启动服务时执行的代码始终是入口点中第一个服务的代码,而不是另一个服务的代码,无论我安装的是什么服务。我还不知道为什么会这样。我还需要做些什么来确保正确服务的代码运行吗?