2012-08-13 76 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