Windows services 重新启动windows服务本身

Windows services 重新启动windows服务本身,windows-services,Windows Services,我有一个windows服务,每当用户向它发送一些数据时,它就会调用一些繁重的图像处理。因此,如果有多个数据,数据将排队并按顺序处理。然而,有时处理数据可能会遇到困难,而处理过程将永远挂在那里。还不确定为什么会发生这种情况。当这种情况发生时,我希望自己重新启动服务,这样当服务重新启动时,队列中的下一个服务将被拾取。我的问题是重新启动服务本身是一个好主意吗?你能做到这一点吗?或者还有其他方法吗 Sapna正如Oded在评论中所说,如果服务挂起,它就无法重新启动。如果你能找出它挂起的原因并阻止它完全挂

我有一个windows服务,每当用户向它发送一些数据时,它就会调用一些繁重的图像处理。因此,如果有多个数据,数据将排队并按顺序处理。然而,有时处理数据可能会遇到困难,而处理过程将永远挂在那里。还不确定为什么会发生这种情况。当这种情况发生时,我希望自己重新启动服务,这样当服务重新启动时,队列中的下一个服务将被拾取。我的问题是重新启动服务本身是一个好主意吗?你能做到这一点吗?或者还有其他方法吗


Sapna

正如Oded在评论中所说,如果服务挂起,它就无法重新启动。如果你能找出它挂起的原因并阻止它完全挂起,那将是最好的,但假设由于某种原因这是不可能的

我能想到的两个选项是,如果图像处理是在一个线程中完成的,并且只有该线程挂起,那么您可能可以有一个单独的“监视”线程,该线程不断检查处理线程是否仍然愉快,否则它会杀死它并重新启动它。或者,如果整个服务挂起,您可以使用一个单独的监视服务来进行检查和重新启动。

您有三项任务:

  • 检测到服务被卡住: 这可以通过不同的方式实现,第一种方式是使用超时
  • 重新启动服务: 可以通过单独的监视服务或同一服务的另一个线程来完成
  • 处理不同服务实例之间的任务队列: 您需要将任务队列序列化到磁盘,以便重新启动服务时,它可以继续处理队列

  • 如果服务挂起,它应该如何重新启动自己呢?好的,是的。完成了。我使用超时来检查正在处理的服务是否被卡住。这是在服务本身中完成的。但我希望在提取下一个数据进行处理之前重新启动服务,以确保前一个处理错误不会损坏内存并影响下一个处理。所以使用Environment是明智的。一旦我检测到处理崩溃,是否退出服务?这是一个自动服务,所以它会在一分钟后自动启动?还有其他建议吗?@Sapna:如果我想像你说的那样做,那么我会创建一个控制处理的服务,并让该服务创建一个新流程来执行实际处理。这样,您就可以让服务一直运行,而不必冒挂起的风险,并且该服务可以轻松地监视处理进程是否已退出(可能是由于挂起而退出),并且可以启动它的另一个实例。按照您的建议退出服务是不对的。@Sapna:因为处理将在一个单独的非服务流程中完成,所以更容易测试所有工作是否正常,服务将非常小和简单。好的,是的……完成了。我使用超时来检查正在处理的服务是否被卡住。这是在服务本身中完成的。但我希望在提取下一个数据进行处理之前重新启动服务,以确保前一个处理错误不会损坏内存并影响下一个处理。所以使用Environment是明智的。一旦我检测到处理崩溃,是否退出服务?这是一个自动服务,所以它会在一分钟后自动启动?还有其他建议吗?@Sapna:
    automatic
    意味着服务将被取消。您需要手动执行此操作,最好是通过单独的服务。另外,在任务完成之前,不要从磁盘上的队列中删除任务。在这种情况下,您不会丢失任务