我有两个 Windows 服务,我们将调用 X 和 Y。X 处理我的应用程序的一般功能,而 Y 的存在是为了使 X 保持最新。它通过检查 X 的更新来做到这一点。如果它们存在,它会下载它们,关闭 X,复制新文件,然后重新启动 X。
但是,我希望 Y 对 X 做同样的事情。不过,我担心的是,每个服务都可能相互关闭,这意味着它们永远不会重新启动。
我可以想到三个解决方案:
- 维护第三个服务 Z,它永远不会更新,它只检查每个服务是否已关闭超过一分钟,如果是,则重新启动它们。无论如何,这并不是一件坏事,但它似乎是我希望能够更新的东西,它再次引入了原始问题。
- 在注册表中维护一个锁,这样 X 在更新之前检查 Y 是否更新,反之亦然。
- 让每个服务在其 OnStop 方法中启动其他服务。不过,这似乎有点骇人听闻。
这个问题的正确解决方案是什么?