2012-08-13 54 views
4

我创建了通过添加NSService进入我的应用程序info.plist中(如在http://www.macosxautomation.com/services/learn/)公开了某些文件OSX服务的应用程序,但我发现,在我的安装应用程序在新机器上的服务不会很快显示在查找器右键单击上下文菜单中。更新OSX与新的服务项目右键快捷菜单

我知道,这是因为纸板的服务还没有重新建立索引/ Applications文件夹和“发现”新安装的服务。

我也知道,我可以强制通过手动运行/系统/图书馆/ CoreServices/PBS重指数和发现。

这里的问题是什么,以确保我的服务尽可能快地显示出来了谁安装的第一次我的应用程序的用户的最佳方式。

当我的应用程序启动时,我可以执行系统调用“/ System/Library/CoreServices/pbs” - 如果用户立即启动我的应用程序 - 但这只能部分解决问题(另外我想知道如果有更好的基于Cocoa API的方式)。

如果我的应用程序一般只能通过上下文菜单访问,用户绝不会想到走出去,开始摆在首位的应用。当上下文菜单不存在时,他们只会认为它被破坏了。

我没有将安装程序分发给我的应用程序。我只是提供一个可以拖放到/ Applications中的软件包(正如我相信Apple通常所建议的那样)。

是否有办法以这种方式执行安装时,以加快服务发现的过程,使用户在哪里没有新安装的服务没有任何时间段?

作为一个方面说明,看起来问题可能不存在于10.8(或至少如此显着)。苹果公司可能会在最近发布的版本中使这种索引更快地发生。

回答

1

其实我已经结束了在我的应用程序之一使用

system("killall pbs;/System/Library/CoreServices/pbs -flush"); 

,正如你所说,虽然这是一个很久以前,当10.5成了问题为好。

你可能想尝试这个功能,但是:

void NSUpdateDynamicServices(void) 

其根据文档的行为就像冲洗PBS,而是一个清晰的解决方案。

此外,如果(根据你的描述),应用程序也不过是一种服务,可考虑将其实际上只是一个服务 - 看到(Installing the Service)

To build a standalone service, use the extension .service and store it in Library/Services. 
+0

感谢,对NSUpdateDynamicServices()调用听起来像一个比运行脚本刷新pbs更好的方法。这半途中解决了这个问题(因为我可以在应用程序启动时运行它),但是如何在只通过服务菜单访问应用程序时完成这项工作仍然是一个谜。我确实怀疑现在是否有答案。 – 2012-11-26 20:20:46

+0

我打算称这是正确的答案。即使感觉不完整,我怀疑是否有更好的。感谢您花时间回答。 – 2013-02-22 22:54:15