我最近写了一个Windows服务并将其安装在生产系统上。在某些应用Windows更新后,必须重新启动服务器并且我的服务未正确加载,尽管它已设置为自动启动。在我们发现客户失败后,该服务手动启动。经过一些研究,我发现我错过了为我们的服务添加服务依赖。因此,对于我们的情况,服务的启动顺序是错误的。
我可以解决这个问题,但我现在对如何收集所有必要的服务依赖项的工具或程序非常感兴趣。你知道任何可以解决这个问题的代码吗?
我很欣赏任何提示。
答案 0 :(得分:3)
工具如何知道您需要哪些服务?通过分析源代码?通过运行服务直到服务失败?
使这项工作的唯一方法是了解您所依赖的服务,并在安装服务时将它们添加到注册表中。
我不是说自动化是不可能的;但如果它可以自动化,那么Windows就已经在做了:当连接到另一个服务时,Windows可以停止你的启动,直到其他服务可用。
答案 1 :(得分:2)
服务及其依赖关系在HKLM / System / CurrentControlSet / Services / xxx下的注册表中描述,其中xxx是服务的名称。有数百个服务,其中只有一些在Services.msc控制台中可见。在服务控制台中,您可以打开服务的属性窗口并查看“依赖关系”选项卡。将列举依赖于服务的服务以及服务所依赖的服务。在注册表中,每个服务都有两个名为“DependOnService”和“DependOnGroup”的可选键。两者都是REG_MULTI_SZ类型,这意味着它们可以包含多个值。查看这些值时使用RegEdt32.exe。这是定义依赖关系的地方。例如,如果要使服务依赖于Microsoft SQL Server,请在服务的密钥中添加一个名为“DependOnService”的密钥,其中包含“MSSQLSERVER”。通过查看服务属性的“依赖关系”选项卡来验证这一点。
如果要发现服务依赖项,则需要以编程方式遍历注册表中的Services项,并注明它们所依赖的服务和服务。完成后,您可以打印出结果。
当我想要发现.NET程序集之间的依赖关系时,我写了类似的东西。