У меня есть две службы Windows, мы назовем X и Y. X отвечает за общую функциональность моего приложения, а Y существует для поддержания X в актуальном состоянии. Он делает это, проверяя наличие обновлений для X. Если они существуют, он загружает их, выключает X, копирует новые файлы и перезапускает X.
Однако я хотел бы, чтобы Y сделал то же самое для X. Однако меня беспокоит то, что каждая служба может отключить друг друга, то есть они никогда не будут перезапущены.
Я могу придумать три решения:
- Поддержите третью службу, Z, которая никогда не обновляется, которая только проверяет, была ли каждая служба закрыта более чем на минуту, и если это так, перезапускает их. В любом случае, это было бы неплохо, но похоже, что я хотел бы иметь возможность обновить, что снова вводит исходную проблему.
- Поддержание блокировки в реестре, чтобы X проверял, обновлен ли Y, прежде чем выполнять само обновление, и наоборот.
- Каждая служба запускает другие службы в своем методе OnStop. Однако это кажется немного хакерским.
Каково правильное решение этой проблемы?