2009-07-04 168 views
4

我正在開發一個應用程序在可可,它需要檢查該應用程序是否已經在啓動運行。如果已經運行,那麼我需要退出新實例..是否有任何方法可以做到這一點..尋找一個完美的解決方案檢查應用程序是否已經運行

+1

同樣的問題作爲http://stackoverflow.com/questions/1081218/ideal-way-to-single-instance-apps-on-the-mac? – smorgan 2009-07-04 15:48:04

+0

這個相同的問題有最好的答案:[鏈接](http://stackoverflow.com/questions/684911/how-to-detect-whether-an-os-x-application-is-already-launched) – 2013-09-17 19:39:50

回答

5

這聽起來像你說你想讓你的可可應用程序的多個實例同時運行。通常,可可應用程序不允許同時運行多個實例,因此通常不需要執行此檢查。有沒有發現可可應用程序正在同時運行的特定情況?

一般來說,一種可可方式來解決這個問題,看看在NSWorkspace中啓動應用程序。這將返回一個NSArray,其中包含每個啓動的應用程序的字典。您可以遍歷數組來查看您正在查找的應用程序是否已在運行。我會建議你使用鍵值爲NSApplicationBundleIdentifier的值,它的值是「com.mycompany.myapp」,而不是查找名稱。如果您需要查找應用程序的包標識符,則可以查看應用程序包中的info.plist文件。

0

我在這裏的答案是不特定的對象c實現,但作爲一般的方法。在類似nix的系統中,守護進程通常會在某處創建一個pid文件來指示其存在。如果一個守護進程不允許多個實例,那麼應用程序的另一個消息應該首先檢查這個pid文件是否存在,如果存在,它自身存在。

0

您可以popen()ps命令的實例並查找應用程序名稱。如果你找到它,關閉新的。也許不是最快的方式,但它的工作原理:-)

相關問題