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

时间:2014-04-16 12:37:25

标签: c# mono cross-platform multiple-instances

我希望在没有任何服务中断的情况下更新应用程序,我的想法是在最后一个时通知应用程序的第一个实例(也就是旧版本)(也就是新版本< / strong>)已准备好开始。

示例:

  1. 旧版正在运行
  2. 新版启动
  3. 新版检测到旧版已在运行
  4. 新版准备投放
  5. 准备好后,新版指示旧版关闭
  6. 关闭时,旧版通知新版本
  7. 新版开始投放
  8. 到时候,程序会以更新的版本重复。

    这样服务就会在最短的时间内中断。


    我的想法是使用系统范围的互斥锁,遗憾的是它们不是单声道的,并且无论如何都可能无法使用此技术执行第5步。

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

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

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

    感谢阅读,Fabio Iotti。

1 个答案:

答案 0 :(得分:0)

有点黑客攻击,但你能不能写一个已知的文件

  1. 应用程序启动并检查其他应用程序的文件
  2. 如果找不到应用程序,则写入“我的身份 - 正在运行”,否则如果找到另一个正在运行的应用程序,请写“我的身份 - 启动”
  3. 正在运行应用程序检查文件中是否有标记为“
  4. ”的新应用程序
  5. 如果找到启动应用程序停止服务并写入“我的ID - 关闭”,则终止应用程序
  6. 启动应用程序将轮询文件,直到找不到正在运行的应用程序,然后它将启动服务并写入“我的ID - 正在运行”
  7. 这看起来像是类似问题的链接:

    Simple cross-platform process to process communication in Mono?