2009-07-04 196 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命令的实例并查找应用程序名称。如果你找到它,关闭新的。也许不是最快的方式,但它的工作原理:-)

相关问题