Windows services 收集Windows服务依赖项

Windows services 收集Windows服务依赖项,windows-services,dependencies,Windows Services,Dependencies,我最近编写了一个Windows服务,并将其安装在生产系统上。在应用了一些Windows更新之后,服务器必须重新启动,并且我的服务没有正确加载,尽管它被设置为自动启动。在客户发现故障后,我们手动启动了服务。经过一些研究,我发现我没有将服务依赖添加到我们的服务中。因此,对于我们的案例,服务的启动顺序是错误的 我可以解决这个问题,但我现在真正感兴趣的是如何收集所有必要的服务依赖项的工具或过程。你知道有什么代码可以处理这个问题吗 我很感激任何提示。工具如何知道您需要哪些服务?通过分析源代码?通过运行服务

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

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


我很感激任何提示。

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

实现此功能的唯一方法是了解所依赖的服务,并在安装服务时将其添加到注册表中


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

服务及其依赖项在HKLM/System/CurrentControlSet/Services/xxx下的注册表中描述,其中xxx是服务的名称。有数百个服务,其中只有一部分在services.msc控制台中可见。在服务控制台中,您可以打开服务的属性窗口并查看依赖项选项卡。将枚举依赖于服务的服务以及服务依赖的服务。在注册表中,每个服务都有两个名为“DependOnService”和“DependOnGroup”的可选键。两者都是REG_MULTI_SZ类型,这意味着它们可以包含多个值。查看这些值时,请使用RegEdt32.exe。这是定义依赖项的地方。例如,如果要使服务依赖于Microsoft SQL Server,请在服务的密钥中添加一个名为“DependOnService”的密钥,其中包含“MSSQLSERVER”。通过查看服务属性的Dependencies选项卡来验证这一点

如果您想发现服务依赖关系,您需要以编程方式遍历注册表中的服务项,注意服务及其依赖的服务。完成后,您可以打印出结果


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

分析源代码是一种选择。假设您使用了,即
ManagementObjectSearcher
,一个当然使用WMI的类。因此,添加依赖项。也许基于程序集依赖关系也有可能,尽管这也会增加误报。我仍然认为,如果Windows在启动服务时能够自己解决这一问题,会更简单。这不是火箭科学,但我怎么知道我的代码需要哪些依赖项呢?对于仅绑定到本地主机/从本地主机调用的WCF服务,我是否需要对DHCP的依赖关系?“我怎么知道,从win7 home到win10 pro的客户机器上提供哪些“通用”服务?”帕特里克斯塔夫表示同意。LinuxSystemd通过要求服务作者指定他们需要和提供的内容来解决这个问题。这让他们可以建立一个依赖关系树。谢谢你的回答,但这不是我想要的。我自己写服务,想知道我需要在那里写什么依赖项(或者安装程序需要写),我也有同样的问题。现在我一直在努力在安装服务时将这些依赖项添加到服务中,但我不知道它们可能是什么。。。