2011-04-24 46 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