Как правильно написать службы Windows, которые обновляют друг друга?

У меня есть две службы Windows, мы назовем X и Y. X отвечает за общую функциональность моего приложения, а Y существует для поддержания X в актуальном состоянии. Он делает это, проверяя наличие обновлений для X. Если они существуют, он загружает их, выключает X, копирует новые файлы и перезапускает X.

Однако я хотел бы, чтобы Y сделал то же самое для X. Однако меня беспокоит то, что каждая служба может отключить друг друга, то есть они никогда не будут перезапущены.

Я могу придумать три решения:

  1. Поддержите третью службу, Z, которая никогда не обновляется, которая только проверяет, была ли каждая служба закрыта более чем на минуту, и если это так, перезапускает их. В любом случае, это было бы неплохо, но похоже, что я хотел бы иметь возможность обновить, что снова вводит исходную проблему.
  2. Поддержание блокировки в реестре, чтобы X проверял, обновлен ли Y, прежде чем выполнять само обновление, и наоборот.
  3. Каждая служба запускает другие службы в своем методе OnStop. Однако это кажется немного хакерским.

Каково правильное решение этой проблемы?


person Mike Pateras    schedule 28.05.2010    source источник


Ответы (1)


В итоге я использовал System.Threading.Mutex. Обе службы всегда будут работать на одном компьютере, так что это очень простое решение.

person Mike Pateras    schedule 08.06.2010