类似Locating bundles by identifier的问题,但问题不同:
我有几个应用程序需要通过ID找到彼此的捆绑包。这总是很有效,除非我对我的所有应用程序进行全新安装。在许多情况下,只需将取景器指向安装位置就可以知道捆绑位置,但有时甚至是不够的;我必须首先运行应用程序,然后才能使用bundle ID来查找路径。我应该提一下,我使用的是将应用程序复制到/ Applications /的安装程序,因此在安装应用程序时,查找器永远不会打开。
似乎在新安装应用程序包时,系统需要一段时间才能更新某个内部注册表,以便将软件包ID映射到软件包位置。我想知道的是:
答案 0 :(得分:3)
如果您需要一个替代方案,则可以使用带有kMDItemCFBundleIdentifier
密钥的Spotlight API进行搜索:
pierre$39> mdfind "kMDItemCFBundleIdentifier == 'org.videolan.vlc'"
/Applications/VLC.app
/Applications/vlc-0.8.6c/VLC.app
Spotlight与系统紧密集成,这样文件/文件夹一旦写入文件系统就会被编入索引,你应该没有任何问题尚未被编入索引。当然,您必须准备好处理多个响应......
答案 1 :(得分:2)
映射在Launch Services数据库中维护。我没有存储它,但确切的位置是无关紧要的,因为有更好的方法来实现你的目标。
您可以通过多种方式手动更新Launch Services数据库,但就个人而言,我认为以编程方式执行此操作会更容易,尤其是在您的情况下。在这种情况下,您将使用Launch Services API - 具体来说,我会考虑使用LSRegisterURL()
,因为这似乎达到了您想要做的目的。
请查看Launch Services documentation,了解有关在数据库中注册应用程序的更多信息,以及这些应用程序的一般工作方式。