安装具有依赖项的Windows服务

16 .net windows installer windows-services .net-2.0

我的安装程序不支持安装服务,但我可以运行程序/命令行等,所以我的问题是我如何安装Windows服务并使用命令行添加2个依赖项?该程序是一个.Net 2.0应用程序.

谢谢

Vol*_*erK 17

您可以编写自安装服务,并在安装程序执行时设置服务依赖的服务列表.

基本步骤:

编辑:忘了提及您可以使用例如Installutil.exe来调用安装程序.

[RunInstaller(true)]
public class MyServiceInstaller : Installer
{
    public MyServiceInstaller()
    {
        using ( ServiceProcessInstaller procInstaller=new ServiceProcessInstaller() ) {
            procInstaller.Account = ServiceAccount.LocalSystem;
            using ( ServiceInstaller installer=new ServiceInstaller() ) {
                installer.StartType = ServiceStartMode.Automatic;
                installer.ServiceName = "FooService";
                installer.DisplayName = "serves a lot of foo.";

                installer.ServicesDependedOn = new string [] { "CLIPBOOK" };
                this.Installers.Add(procInstaller);
                this.Installers.Add(installer);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Kip*_*Kip 10

这也可以通过使用该sc命令的提升命令提示符来完成.语法是:

sc config [service name] depend= <Dependencies(separated by / (forward slash))>
Run Code Online (Sandbox Code Playgroud)

注意:有一个空间等号,有没有一个之前.

警告:depend=参数将覆盖现有的依赖项列表,而不是追加.因此,例如,如果ServiceA已经依赖于ServiceB和ServiceC,那么如果运行depend= ServiceD,ServiceA现在将依赖于ServiceD.

例子

对其他服务的依赖:

sc config ServiceA depend= ServiceB
Run Code Online (Sandbox Code Playgroud)

以上意味着ServiceA在ServiceB启动之前不会启动.如果停止ServiceB,ServiceA将自动停止.

对多种其他服务的依赖:

sc config ServiceA depend= ServiceB/ServiceC/ServiceD
Run Code Online (Sandbox Code Playgroud)

以上意味着在ServiceB,ServiceC和ServiceD全部启动之前ServiceA不会启动.如果您停止任何ServiceB,ServiceC或ServiceD,ServiceA将自动停止.

要删除所有依赖项:

sc config ServiceA depend= /
Run Code Online (Sandbox Code Playgroud)

列出当前依赖项:

sc qc ServiceA
Run Code Online (Sandbox Code Playgroud)