代码之家  ›  专栏  ›  技术社区  ›  Scoregraphic

收集Windows服务依赖项

  •  4
  • Scoregraphic  · 技术社区  · 16 年前

    我最近编写了一个Windows服务并将其安装在生产系统上。在应用了一些Windows更新之后,服务器必须重新启动,我的服务没有正确加载,尽管它被设置为自动启动。在客户发现故障后,我们的服务就开始了。经过一些研究,我发现我错过了向我们的服务添加服务依赖项。所以服务的引导顺序对我们的案例来说是错误的。

    我可以解决这个问题,但现在我真的对一个工具或过程感兴趣,关于如何收集所有必要的服务依赖性。你知道可以处理这个的代码吗?

    我很感激任何暗示。

    2 回复  |  直到 16 年前
        1
  •  3
  •   Aaron Digulla    16 年前

    工具如何知道您需要哪些服务?通过分析源代码?运行服务直到服务失败?

    实现这一点的唯一方法是了解您所依赖的服务,并在安装服务时将它们添加到注册表中。

    我不是说这不可能实现自动化;但是如果它可以实现自动化,那么Windows就已经做到了:当连接到另一个服务时,Windows可以停止您的启动,直到另一个服务可用。

        2
  •  2
  •   IanT8    16 年前

    服务及其依赖项在注册表中的hklm/system/currentcontrolset/services/xxx下进行描述,其中xxx是服务的名称。有数百个服务,其中只有一些在services.msc控制台中可见。在服务控制台中,您可以打开服务的属性窗口并查看依赖项选项卡。将枚举依赖于该服务以及该服务所依赖的服务。在注册表中,每个服务都有两个名为“dependonService”和“dependonGroup”的可选键。两者都是Reg_multi_sz类型,这意味着它们可以包含多个值。查看这些值时使用regedt32.exe。这就是定义依赖关系的地方。例如,如果要使服务依赖于Microsoft SQL Server,请在服务的键中添加一个名为“DependonService”的键,其中包含“mssqlserver”。通过查看服务属性的依赖项选项卡来验证这一点。

    如果要发现服务依赖项,则需要以编程方式在注册表中遍历services项,并记下它们所依赖的服务和服务。一旦你做到了,你就可以打印出结果。

    当我想发现.NET程序集之间的依赖关系时,我写了类似的东西。