确保一次最多运行一个进程

本文关键字:一个 进程 运行 一次 确保 | 更新日期: 2023-09-27 17:52:35

有几个应用程序,其中不止一个进程不能同时运行。例如,我们不能同时运行两个windows Media Player实例。即使我们多次点击exe,另一个进程将而不是启动!

我想知道在以下情况下如何做到这一点:

  • 如果应用程序是用c++开发的。应用程序不必是基于GUI的应用程序。
  • ,如果应用程序是使用。net技术开发的。同样,应用程序不需要是基于GUI的应用程序。
我完全不知道这个问题,所以我甚至不知道如何恰当地提出这个问题。如果我遗漏了什么(任何细节),请随时要求澄清,或假设(如果可能的话)在你的答案。

确保一次最多运行一个进程

通常应用程序需要在启动时尝试获取一些独特的资源;如果失败,它应该退出。唯一资源的性质因环境而异——例如,它可以监听特定的TCP端口,或者锁定文件或共享内存段。当然,程序在退出时需要小心地释放资源。

它们都依赖于相同的技巧:创建一个众所周知的命名对象(通常是互斥对象)并锁定它。所有实例都试图在启动期间创建并锁定此对象,如果它已经存在并且无法锁定,则说明另一个实例已经在运行,因此关闭。

private static Mutex m_Mutex;
m_Mutex = new Mutex(true, "myApp");
        if (m_Mutex.WaitOne(0, false))
            Application.Run(new MainForm());