I have two Windows services, we'll call X and Y. X handles the general functionality for my application, and Y exists to keep X up to date. It does this by checking for updates to X. If they exist, it downloads them, shuts down X, copies in the new files, and restart X.
However, I'd like Y to do the same thing for X. My concern, though, is that it's possible for each service to shut each other down, meaning they never get restarted.
I can think of three solutions:
- Maintain a third service, Z, which is never updated, that only checks if each service has been shut down for more than a minute, and if so, restarts them. This wouldn't be a bad thing to have, anyway, but it seems like something that I'd like to be able to update, which introduces the original problem, again.
- Maintaining a lock in the registry, such that X checks if Y is updated before doing an update itself, and vice versa.
- Having each service start the other services in its OnStop method. This seems a bit hackish, though.
What is the proper solution to this problem?