【问题标题】:Controlling start up sequence of a windows service控制 Windows 服务的启动顺序
【发布时间】:2010-10-01 07:13:15
【问题描述】:

我使用 installutil 安装了 Windows 服务并设置为“自动启动”。我的问题是,当某些服务器重新启动时,它会尝试在“Microsoft SQL 服务”启动之前启动——我可以通过在系统重新启动期间查看事件日志来看到这一点。 Sql server 服务启动后让我的服务“自动启动”的最佳方法是什么?

我正在玩弄创建一个 SQL 作业集的想法,该作业集在“SQL 服务器代理”启动时启动,然后启动 Windows 服务。但希望有一种简单有效的方法来控制自动服务的启动顺序。

【问题讨论】:

    标签: sql windows-services autostart installutil


    【解决方案1】:

    每个 Windows 服务都有一个它所依赖的其他服务的列表。这意味着它会等到它的依赖项启动后才会尝试启动,如果在您启动时它们没有自动启动,它会为您启动它们。

    如果您在 .NET 中创建 Windows 服务,这里有一篇博文可能会有所帮助:

    How to: Code Service Dependencies

    否则这里有一个 Microsoft kb 条目,详细说明了通过注册表添加服务依赖项的方法:

    How to delay loading of specific services

    【讨论】:

    • 谢谢。那效果很好。我添加了安装程序类 - 转到属性并添加了对“MSSQLSERVER”服务的依赖项。似乎工作。想知道 SQL Server 2005、2008 的服务名称是否保持不变..
    • 如果用户想在一个集中的故障转移集群上运行 SQL Server 会发生什么?
    • @matthamilton 顶部链接已损坏
    • @DuncanGroenewald 网络的危险。遗憾的是,当它们只是博客文章时,不能保证 URL 是永久的。 :( 已修复。
    【解决方案2】:

    您可以设置服务之间的依赖关系。

    See here:

    【讨论】:

      【解决方案3】:

      如果您想使用批处理脚本执行此操作,那么以下内容会有所帮助

      REG ADD "HKLM\SYSTEM\CurrentControlSet\Services\%ServiceKey%" /v "DependOnService" /t REG_MULTI_SZ /d "Service Number 01\0Service Number 02"

      这使用 reg.exe see here

      【讨论】:

        【解决方案4】:

        依赖关系很诱人,但在 SQL Server 的情况下,可能对系统的长期设计有害。考虑一下您的应用程序是否成功,而您的客户是否希望移动到另一个机器上的单独 SQL 服务器或故障转移集群。

        更好的设计可能是在你的服务启动时加入一些重试/超时逻辑,这样它就会尝试联系 SQL Server(甚至可能在另一台机器上),等待,尝试,然后优雅地失败。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-07-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-05
          • 2010-12-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多