2011-04-24 41 views
2

有几个应用程序,其中一个以上的进程不能同时运行。例如,我们无法运行Window Media Player的两个实例。即使我们多次点击这个exe,另一个进程也会不是开始!确保一次只能运行一个进程

我不知道怎么做,在以下几种情况:

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

我对此一无所知,所以甚至不知道如何正确提出问题。如果我缺少任何东西(任何细节),请随时要求澄清,或者在您的答案中假设(如果可能的话)。

+4

搜索http://stackoverflow.com/search?q=single+instance+application这是一个常见问题。 – 2011-04-24 16:40:19

回答

3

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

3

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

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

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

这是否适用于流程而不仅仅是线程? – Jay 2011-04-25 01:01:35