一般来说,我有自己的服务,例如:Service1、Service2、Service3 ... ServiceN。这些服务是相互关联的,要等上一个服务启动后才能启动,即如果Service1服务没有启动,那么Service2服务将无法启动,以此类推。
我需要编写一个服务来按顺序启动这些服务。我创建了StartService服务,例如,通过它按顺序启动服务,但我遇到了一个问题:服务只有在当前服务(StartService)停止时才会启动。
也就是说,事实证明我需要启动Service1服务,然后停止我的StartService服务以便启动Service1服务,之后我再次需要启动我的StartService服务。您还需要在启动每个服务之前停止代码的执行 5-10 秒(类似于睡眠),以便之前正在运行的服务完成其操作。
问题是怎么做?如何强制服务自行重启?
代码示例:
namespace WindowsService
{
static class Program
{
static void Main()
{
// Для запуска служб
ServiceController service;
// Текущая служба
ServiceController currentService = new ServiceController("StartService");
var ServicesToRun = new ServiceBase[]
{
new Service1()
};
ServiceBase.Run(ServicesToRun);
service = new ServiceController("Service1");
// Если служба не запущена
if (service.Status != ServiceControllerStatus.Running)
{
// Запускаем службу
service.Start();
// Перезапускаем текущую службу (Это не правильно)
currentService.Stop();
currentService.Start();
}
service = new ServiceController("Service2");
if (service.Status != ServiceControllerStatus.Running)
{
// Запускаем службу
service.Start();
// Останавливаем текущую службу
currentService.Stop();
}
}
}
}
在另一个论坛上,他们建议您可以使用批处理文件启动服务,而无需创建服务即可启动服务。我一开始没有考虑。制作了一个批处理文件: