2009-06-14 1 views
4

Вопроса, аналогичного Locating bundles by identifier, но другая проблема:OS X: расслоение местоположения по идентификатору для вновь установленного приложения

У меня есть несколько приложений, которые должны найти пакеты друг друга по их идентификаторам. Это всегда хорошо работает, если я не сделаю совершенно новую установку всех моих приложений. Во многих случаях достаточно указать поисковому устройству на место установки для местоположения узлов, чтобы быть известным, но иногда даже этого недостаточно; Я должен запустить приложение прежде, чем его идентификатор пакета можно использовать для поиска пути. Я должен упомянуть, что я использую установщик, который копирует приложения в/Applications /, поэтому искатель никогда не открывается при установке приложений.

Похоже, что когда пакет приложений недавно установлен, он берет систему за некоторое время до обновления какого-либо внутреннего реестра, который сопоставляет идентификатор пакета в месте расположения пакета. То, что я хотел бы знать:

  1. где эти отображения поддерживается и
  2. , как я могу заставить систему/менеджер файлов/рабочее пространство для обновления карты

ответ

2

Отображения являются (?) поддерживается в базе данных служб запуска. Я не знаю, где это хранится, но точное местоположение не имеет значения, поскольку есть лучшие способы достижения вашей цели.

Вы можете вручную обновить базу данных служб запуска несколькими способами, но лично я думаю, что делать это программно было бы проще, особенно в вашей ситуации. В этом случае вы бы использовали API-интерфейс Launch Services, в частности, я бы посмотрел на использование LSRegisterURL(), так как это похоже на то, что вы хотите сделать.

Для получения дополнительной информации о регистрации приложений в базе данных и о том, как это все работает в целом, обратитесь к Launch Services documentation.

+0

Спасибо за ссылку на документацию о запуске услуг. Раньше я читал большую часть этой документации, но, видимо, пропустил этот параграф. Я надеялся на более простое решение, чем использование LSRegisterURL(), например, запуск фрагмента AppleScript или что-то в этом роде, но это достаточно близко, поэтому я буду принимать его как ответ. Благодарю. –

+0

Существует инструмент, называемый «lsregister», где-то глубоко погруженный в инфраструктуру Launch Services, которую вы можете запустить в качестве альтернативы, но я не уверен, что это проще. – hbw

+1

htw: Я думаю, он хочет сделать это из сценария пост-полета установщика. В этом случае запуск AppleScript будет проще. Кроме того, lsregister только наклонно документирован, поэтому я не буду полагаться на него. –

3

Альтернативой, в случае, если вы когда-нибудь понадобится один, будет искать с помощью API, Spotlight с ключом kMDItemCFBundleIdentifier:

pierre$39> mdfind "kMDItemCFBundleIdentifier == 'org.videolan.vlc'" 
/Applications/VLC.app 
/Applications/vlc-0.8.6c/VLC.app 

Прожектор тесно интегрирована с системой, таким образом, что файлы/папки индексируется, как в скором времени, когда они будут записаны в файловую систему, у вас не должно быть проблем с тем, что приложение не было проиндексировано. Конечно, вы должны быть готовы к обработке более одного ответа ...