Cocoa OS X:新安装应用程序的绑定位置(按标识符)

Cocoa OS X:新安装应用程序的绑定位置(按标识符),cocoa,macos,bundle,Cocoa,Macos,Bundle,一个类似但不同的问题: 我有几个应用程序需要根据它们的ID来定位彼此的捆绑包。除非我对所有应用程序进行全新安装,否则它们总是工作得很好。在许多情况下,将查找器指向安装位置就足以知道捆绑包的位置,但有时这还不够;我必须先运行应用程序,然后才能使用其包ID查找路径。我应该提到,我使用的安装程序将应用程序复制到/applications/,因此在我安装应用程序时,查找程序永远不会打开 似乎在新安装应用程序捆绑包时,系统需要一段时间才能更新将捆绑包ID映射到捆绑包位置的某个内部注册表。我想知道的是: 这

一个类似但不同的问题:

我有几个应用程序需要根据它们的ID来定位彼此的捆绑包。除非我对所有应用程序进行全新安装,否则它们总是工作得很好。在许多情况下,将查找器指向安装位置就足以知道捆绑包的位置,但有时这还不够;我必须先运行应用程序,然后才能使用其包ID查找路径。我应该提到,我使用的安装程序将应用程序复制到/applications/,因此在我安装应用程序时,查找程序永远不会打开

似乎在新安装应用程序捆绑包时,系统需要一段时间才能更新将捆绑包ID映射到捆绑包位置的某个内部注册表。我想知道的是:

  • 这些映射在哪里维护和维护
  • 如何强制系统/文件管理器/工作区(?)更新映射

  • 映射在Launch Services数据库中维护。我不知道这是存储在哪里,但确切的位置是无关紧要的,因为有更好的方法来实现你的目标

    您可以通过多种方式手动更新Launch Services数据库,但就个人而言,我认为以编程方式进行更新会更容易,尤其是在您的情况下。在这种情况下,您将专门使用LaunchServices API,我将研究如何使用,因为这似乎实现了您想要做的事情


    查看,以获取有关在数据库中注册应用程序的更多信息,以及这一切通常是如何工作的。

    如果您需要,另一种选择是使用Spotlight API和键进行搜索:

    pierre$39>mdfind“kMDItemCFBundleIdentifier=='org.videolan.vlc'”
    /应用程序/VLC.app
    /应用程序/vlc-0.8.6c/vlc.app
    

    Spotlight与系统紧密集成,因此文件/文件夹一写入文件系统就会被索引,您不应该有应用程序尚未被索引的任何问题。当然,您必须准备好处理多个响应…

    感谢您提供到Launch Services文档的链接。我以前确实读过这篇文档的大部分内容,但显然没有读到那一段。我希望有一个比使用LSRegisterURL()更简单的解决方案,比如运行一段AppleScript或其他东西,但这已经足够接近了,所以我接受它作为答案。谢谢。在Launch Services框架的深处有一个名为“lsregister”的工具,您可以将其作为替代工具运行,但我不确定这是否更简单。htw:我想他希望通过安装程序的飞行后脚本来实现这一点。在这种情况下,运行AppleScript会更简单。而且,lsregister只是间接记录的,所以我不会依赖它的存在。