2009-06-14 72 views
4

类似Locating bundles by identifier一个问题束的位置,但不同的问题:OS X:通过识别新安装的应用程序

我需要通过自己的ID找到彼此的捆绑多个应用程序。这总是很好,除非我全新安装所有的应用程序。在很多情况下,将取景器指向捆绑位置的安装位置就足够了,但有时甚至还不够;我必须先运行该应用程序,然后才能使用捆绑ID来查找路径。我应该提到,我使用的是将应用程序复制到/ Applications /的安装程序,因此安装应用程序时从未打开过查找程序。

看来,当新安装应用程序包时,系统需要一段时间才能更新一些内部注册表,以便将包ID映射到包位置。我想知道的是:

  1. 被这些映射维护地方和
  2. 我怎么能强制系统/文件管理器/工作区更新地图

回答

2

的映射是(?)保存在启动服务数据库中。我不会在这里存储这些信息,但确切的位置并不重要,因为有更好的方法来实现您的目标。

您可以通过多种方式手动更新启动服务数据库,但个人而言,我认为以编程方式执行操作会更容易,尤其是在您的情况下。在这种情况下,您可以使用Launch Services API--具体来说,我会考虑使用LSRegisterURL(),因为这似乎可以达到您想要的效果。

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

+0

感谢您提供Launch Services文档的链接。我之前曾阅读过这个文档的大部分内容,但显然错过了该段落。我希望得到比使用LSRegisterURL()更简单的解决方案,就像运行AppleScript的代码片段或其他东西一样,但是这足够接近,所以我会接受它作为答案。谢谢。 – 2009-06-14 22:58:29

+0

有一种名为“lsregister”的工具被埋在启动服务框架的某处,您可以作为替代方案运行,但我不确定这是否更简单。 – hbw 2009-06-15 01:35:08

+1

htw:我想他想从安装程序的post-flight脚本中做到这一点。在这种情况下,运行AppleScript会更简单。另外,lsregister只是记录在案,所以我不会依赖它。 – 2009-06-15 02:04:04

3

另一种,如果你需要一个,将所有使用Spotlight的API与kMDItemCFBundleIdentifier键搜索:

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

焦点是紧密结合的系统集成,这样文件/文件夹得到索引为一旦它们被写入文件系统,就不会有任何应用程序未被编入索引的问题。当然,您必须准备好处理多个响应...