2009-07-04 5 views
4

Я разрабатываю приложение в какао, которое необходимо проверить, запущено ли это приложение при запуске. Если он уже запущен, мне нужно выйти из нового экземпляра. Есть ли способ сделать это ..Посмотреть идеальное решениеПроверьте, запущено ли приложение уже запущено

+1

Тот же вопрос, что и http://stackoverflow.com/questions/1081218/ideal-way-to-single-instance-apps-on-the-mac? – smorgan

+0

Этот идентичный вопрос имеет лучший ответ: [link] (http://stackoverflow.com/questions/684911/how-to-detect-whether-an-os-x-application-is-already-launched) –

ответ

5

Похоже, вы говорите, что хотите сохранить несколько экземпляров вашего приложения для какао в одно и то же время. Обычно приложения для какао не позволяют запускать несколько экземпляров одновременно, поэтому вам не нужно будет выполнять эту проверку. Есть ли какое-то конкретное обстоятельство, в котором вы находите, что приложение какао запускается одновременно?

В общем, способ какао решить этот взгляд на launchApplications в NSWorkspace. Это возвращает NSArray, содержащий словарь для каждого запущенного приложения. Вы можете пройти через массив, чтобы узнать, работает ли приложение, которое вы ищете. Я бы посоветовал использовать значение с ключом NSApplicationBundleIdentifier, который будет иметь значение, например «com.mycompany.myapp», а не искать имя. Если вам нужно найти идентификатор пакета для приложения, вы можете посмотреть его файл info.plist в пакете приложений.

0

Мой ответ здесь не относится к реализации объекта-c, а как к общему подходу. В системах типа * nix демона обычно создают файл pid где-то, чтобы указать на его существование. Если демон не разрешает несколько экземпляров, то другой огонь приложения должен сначала проверить, существует ли такой файл pid, если он существует, сам.

+1

Стоит отметить что этот ответ применим только к демонам, а не к фактическим приложениям. Более того, это не относится к демонам специально для Mac OS X; рекомендуемым способом является проверка с помощью startd. http://developer.apple.com/technotes/tn2005/tn2083.html –

+0

Хотя я использовал слово «демон», шаблон файла pid не должен быть ограничен для демона одного экземпляра. В пользовательских интерактивных приложениях, как правило, он реализуется через .lockfile в профиле приложений. Он почти служит той же цели, что и pidfile daemon. Спасибо за ссылку. Launchd рекомендуется и выглядит так, как будто все зависит от того, как указать конфигурацию. Но я все еще заблокирован, чтобы увидеть, где он гарантирует, чтобы предотвратить запуск нескольких экземпляров. – jimx

0

вы можете открыть() экземпляр команды ps и найти имя приложения. если вы его найдете, выключите новый. возможно, это не самый быстрый способ, но он работает :-)

Смежные вопросы