一个应用程序的多个实例,如何关闭第一个实例并保留最后一个实例

本文关键字:实例 何关闭 第一个 最后一个 保留 一个 应用程序 | 更新日期: 2023-09-27 17:58:32

我想在不中断任何服务的情况下更新应用程序,其想法是通知应用程序的第一个实例(也称为旧版本)何时准备好启动最后一个实例(即新版本

示例:

  1. 旧版本正在运行
  2. 新版本启动
  3. 新版本检测到旧版本
  4. 新版本准备服务
  5. 准备就绪后,新版本指示旧版本
  6. 关闭时,旧版本通知新版本
  7. 新版本开始服务

时间到了,会用更新的版本重复此过程。

通过这种方式,服务会在尽可能短的时间内中断。


我的想法是使用系统范围的互斥,不幸的是,它们在mono中不可用,而且无论如何都不可能用这种技术完成第5步。

另一种方法可能是使用管道,这在mono上也不可用。

我的最后一个想法是在随机(恒定)端口上使用绑定到环回地址的套接字,你认为这可以吗?或者有更好的方法来处理像我这样的情况?

所有代码都必须在Mono.NET上运行。

感谢阅读,法比奥·伊奥蒂。

一个应用程序的多个实例,如何关闭第一个实例并保留最后一个实例

有点像黑客,但你能直接写入一个已知的文件吗

  1. 应用程序启动文件并检查其他应用程序
  2. 如果找不到应用程序,则写入"我的id-running",否则如果找到另一个正在运行的应用程序则写入"my id-starting"
  3. 运行应用程序检查文件中是否有任何标记为启动的新应用程序
  4. 如果发现启动应用程序,请停止服务并写下"我的id-shutdown",然后终止应用程序
  5. 启动应用程序将轮询文件,直到发现没有应用程序在运行,然后启动服务并写入"我的id-running"

这看起来像是一个类似问题的链接:

Mono中简单的跨平台进程到进程通信?