我使用 installutil 安装了一个 Windows 服务并设置为“自动启动”。我的问题是,当某些服务器重新启动时,它会在“Microsoft SQL 服务”启动之前尝试启动——我可以通过在系统重新启动期间查看事件日志来看到这一点。Sql server 服务启动后使我的服务“自动启动”的最佳方法是什么?
我正在玩弄创建一个 SQL 作业集的想法,该作业集在“SQL 服务器代理”启动时启动,然后启动 Windows 服务。但希望有一种简单有效的方法来控制自动服务的启动顺序。
我使用 installutil 安装了一个 Windows 服务并设置为“自动启动”。我的问题是,当某些服务器重新启动时,它会在“Microsoft SQL 服务”启动之前尝试启动——我可以通过在系统重新启动期间查看事件日志来看到这一点。Sql server 服务启动后使我的服务“自动启动”的最佳方法是什么?
我正在玩弄创建一个 SQL 作业集的想法,该作业集在“SQL 服务器代理”启动时启动,然后启动 Windows 服务。但希望有一种简单有效的方法来控制自动服务的启动顺序。
每个 Windows 服务都有一个它所依赖的其他服务的列表。这意味着它会等到它的依赖项启动后才会尝试启动,如果在您启动时它们没有自动启动,它会为您启动它们。
如果您在 .NET 中创建 Windows 服务,这里有一篇博文可能会有所帮助:
否则这里有一个 Microsoft kb 条目,详细说明了通过注册表添加服务依赖项的方法:
您可以设置服务之间的依赖关系。
如果您想使用批处理脚本执行此操作,那么以下内容将有所帮助
REG ADD "HKLM\SYSTEM\CurrentControlSet\Services\%ServiceKey%" /v "DependOnService" /t REG_MULTI_SZ /d "Service Number 01\0Service Number 02"
这使用reg.exe 见这里
依赖关系很诱人,但在 SQL Server 的情况下,可能对系统的长期设计有害。考虑一下您的应用程序是否成功并且您的客户是否希望移动到另一个盒子上的单独 SQL 服务器或故障转移集群。
更好的设计可能是在您的服务启动时加入一些重试/超时逻辑,以便它尝试联系 SQL Server(甚至可能在另一台机器上),等待,尝试,然后优雅地失败。