C#等待其他服务启动

我正在编写一个依赖其他服务的Windows服务,我应该如何等待其他服务启动?

谢谢

除了alredy指出的其他答案之外,如果其中一个服务是SQL server,则需要确保特定的数据库以及SQL server服务本身可用。 我使用类似于以下的函数:

public class DbStatus { public static bool DbOnline() { const int MaxRetries = 10; int count = 0; while (count < MaxRetries) { try { // Just access the database. any cheap query is ok since we don't care about the result. return true; } catch (Exception ex) { Thread.Sleep(30000); count++; } } return false; } } 

我想你应该这样做

installer.ServicesDependedOn = new string [] {“DependenceService”};

喜欢这个:

 using (ServiceProcessInstaller processInstaller = new ServiceProcessInstaller()) { processInstaller.Account = ServiceAccount.LocalSystem; processInstaller.Username = null; processInstaller.Password = null; using (ServiceInstaller installer = new ServiceInstaller()) { installer.DisplayName = "yourservice."; installer.StartType = ServiceStartMode.Automatic; installer.ServiceName = "YourService"; installer.ServicesDependedOn = new string [] { "DependenceService" }; this.Installers.Add(processInstaller); this.Installers.Add(installer); } } 

祝你好运

你需要指定依赖关系。 你可以在你的Installer类中做到这一点。

进一步澄清

您应该使用安装程序类作为安装项目中的自定义操作来安装您的服务。 如果你不是,发表评论,我会更新这个答案与步骤如何做到这一点。

在您的Installer类的设计器内部,您应该看到两个组件:一个serviceInstaller和一个serviceProcessInstaller。 我不记得我头顶的是什么,但其中的一个有一个属性,允许您指定一个多行字符串,列出服务的依赖关系的服务名称。

正如其他人在这里所说的,你应该使用ServiceInstaller类 ,但是你并不需要一个完整的设置项目。 您可以使用.NET Framework附带的命令行工具InstallUtil.exe快速安装。

你有其他服务的控制权吗? 如果是,让他们开始你,如果没有,我猜你必须开始,并监视自己正在发生什么事情。 当其他进程开始时,可​​以向WMI注册自己以获得通知 – 这是有问题的。

在您的服务项目中, 按照此处所述添加项目安装程序。 您的ProjectInstaller的其中一个属性将是ServicesDependedOn 。 当您将服务添加到该字符串数组(您可以通过IDE执行此操作)时,它们将需要在服务启动之前启动。 如果他们没有启动,SCM会尝试启动它们。