安装具有依赖项的 Windows 服务

Posted

技术标签:

【中文标题】安装具有依赖项的 Windows 服务【英文标题】:Installing a Windows Service with dependencies 【发布时间】:2010-11-06 13:21:52 【问题描述】:

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

谢谢

【问题讨论】:

你用的是什么安装系统? 【参考方案1】:

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

基本步骤:

向您的项目添加对 System.Configuration.Install 的引用。 添加一个派生自 System.Configuration.Install.Installer 并应用了 RunInstaller attribute 的类。 在其构造函数中创建ServiceProcessInstaller 和ServiceInstaller 对象。 在 ServiceInstaller 对象上,您可以使用 ServicesDependedOn 属性标记您想要/需要的所有依赖项。 将这两个安装程序添加到您从 System.Configuration.Install.Installer 继承的安装程序 InstallersCollection 中 完成。

编辑:忘了提到你可以使用例如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);
            
        
    

【讨论】:

【参考方案2】:

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

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

注意:等号后有一个空格,等号之前有一个没有

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

示例

对其他服务的依赖:

sc config ServiceA depend= ServiceB

Above 表示在 ServiceB 启动之前,ServiceA 不会启动。如果停止 ServiceB,ServiceA 会自动停止。

对多个其他服务的依赖:

sc config ServiceA depend= ServiceB/ServiceC/ServiceD

Above 表示在 ServiceB、ServiceC 和 ServiceD 都启动之前,ServiceA 不会启动。如果您停止 ServiceB、ServiceC 或 ServiceD 中的任何一个,ServiceA 将自动停止。

删除所有依赖项:

sc config ServiceA depend= /

列出当前依赖项:

sc qc ServiceA

【讨论】:

【参考方案3】:

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

查看文章中的 sc create 部分,了解您需要的内容。

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

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

【讨论】:

VS 部署项目在哪里可以设置windows 服务的依赖关系。他不是在谈论先决条件。

以上是关于安装具有依赖项的 Windows 服务的主要内容,如果未能解决你的问题,请参考以下文章

没有 .net 依赖项的 Windows 安装项目

无法安装具有 C 依赖项的 Python 库

g ++构建具有boost依赖项的c ++程序

从 CRAN 镜像安装具有依赖项的本地 R 包

具有依赖关系的 Windows 服务的关闭顺序 [关闭]

windows 2003添加删除windows组件中无iis应用程序服务器项的解决