我创build了一个设置为自动启动的Windows服务。 此服务在启动时连接到数据库服务。 问题是数据库服务似乎开始后,我的服务。 是否有编程方式来定义此依赖关系,以便在数据库服务启动后启动服务。
我发现这篇文章http://www.boyce.us/windows/servertipcontent.asp?ID=7其中谈到添加一个registry项来做到这一点。 我想知道是否有一个C#的方式来做到这一点?
更新:
加上上面的问题。 这是另一种情况。 这些服务正在使用installshied进行安装,而不需要projectinsaller。 看来installshield会查找派生自ServiceBase类的类并安装每个服务。 如何在这种情况下添加依赖项?
您正在为项目的ServiceInstaller组件寻找ServiceInstaller.ServicesDependedOn属性 。
从文章的“备注”部分(我用粗体显示您感兴趣的部分):
服务可以要求其他服务在启动之前运行。 来自此属性的信息被写入注册表中的一个键。 当用户(或系统,在自动启动的情况下)尝试运行服务时,服务控制管理器(SCM)将验证阵列中的每个服务是否已经启动。
如果数组中的任何服务没有运行,SCM将尝试启动它们。 这包括使用手动启动类型的服务 。
如果此服务所依赖的任何服务无法启动,则此服务将无法启动。 如果系统未启动,则不会引发异常,因为系统级没有异常处理来检测此异常。 决定如何处理服务启动失败并在您的代码中执行此操作。 通常情况下,如果服务启动失败,则会在启动时向用户显示一个对话框。
如果该服务没有启动,则将条目写入应用程序事件日志。
该服务所依赖的服务不需要在同一个可执行文件中。
除了Jay Riggs的回答之外,还有一些例子,您应该添加到serviceinstaller中,使您的服务依赖于事件日志
Me.ServiceInstaller1.ServiceName = "Service1"; Me.ServiceInstaller1.ServicesDependedOn = new string[] {"EventLog"};
当然,如果你有另外一个服务依赖,把“Eventlog”改成其他的东西。