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

时间:2011-04-24 16:36:27

标签: c# .net c++ process

有几个应用程序,一次不能运行多个进程。例如,我们无法运行Window Media Player的两个实例。即使我们多次点击exe,另一个进程开始!

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

  • 如果应用程序是用C ++开发的。该应用程序不必是基于GUI的应用程序。
  • 如果应用程序是使用.NET技术开发的。同样,应用程序不必是基于GUI的应用程序。

我完全不知道这一点,所以甚至不知道如何恰当地提出问题。如果我遗漏任何东西(任何细节),请随时要求澄清,或在你的答案中假设(如果可能的话)。

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

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

答案 2 :(得分:0)

private static Mutex m_Mutex;
m_Mutex = new Mutex(true, "myApp");

        if (m_Mutex.WaitOne(0, false))
            Application.Run(new MainForm());