安装具有依赖项的Windows服务

时间:2009-06-28 22:39:05

标签: .net windows windows-services .net-2.0 installer

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

由于

5 个答案:

答案 0 :(得分:16)

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

基本步骤:

编辑:忘记提及您可以使用例如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);
            }
        }
    }
}

答案 1 :(得分:10)

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

sc config [service name] depend= <Dependencies(separated by / (forward slash))>

注意:在等号后面有一个空格,并且之前有

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

实施例

对另一项服务的依赖:

sc config ServiceA depend= ServiceB

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

对多个其他服务的依赖:

sc config ServiceA depend= ServiceB/ServiceC/ServiceD

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

删除所有依赖项:

sc config ServiceA depend= /

列出当前依赖项:

sc qc ServiceA

答案 2 :(得分:1)

可用的一种方法是sc.exe。它允许您从命令提示符安装和控制服务。这是older article覆盖它的用途。它确实允许您指定依赖项。

请查看 sc create 部分的文章,了解您的需求。

答案 3 :(得分:1)

在codeproject上有一个动态安装程序项目,我发现它通常对服务安装很有用。

答案 4 :(得分:1)

Visual Studio Setup/Deployment项目可以为此工作。它们不是最好的安装程序引擎,但它们适用于简单的场景。