【发布时间】:2014-04-16 12:37:24
【问题描述】:
我想在不中断任何服务的情况下更新应用程序,其想法是通知应用程序的第一个实例(又名旧版本)何时是最后一个(又名新版本) 已准备好开始。
示例:
- 旧版本正在运行
- 新版本开始
- 新版本检测到旧版本已经在运行
- 新版本准备投放
- 准备就绪后,新版本指示旧版本关闭
- 关闭时,旧版本通知新版本
- 新版本开始服务
时机成熟时,会使用更新的版本重复该过程。
这样服务会在尽可能短的时间内中断。
我的想法是使用系统范围的互斥锁,不幸的是它们在单声道中不可用,而且无论如何使用这种技术可能无法执行第 5 步。
另一种方法是使用管道,这在单声道上也不可用。
我的最后一个想法是在随机(恒定)端口上使用绑定到环回地址的套接字,您认为这很好还是有更好的方法来处理像我这样的情况?
所有代码都必须在 linux Mono 和 .NET 上运行。
感谢阅读,法比奥·伊奥蒂。
【问题讨论】:
-
这可能有点矫枉过正。您说的是哪种应用程序?服务?有用户界面的东西吗?
-
它是一个 Web 服务器,所以是一个服务,一个控制台应用程序无论如何都可以。
-
如果没有用户界面(关闭请求可能无限期等待),那么我只需要求进程终止(
Process.Close())并开始等待(Process.WaitForExit)。旧版本将始终在退出之前处理待处理的请求,而新版本将一直待处理直到完成。无需 IPC。
标签: c# mono cross-platform multiple-instances