2009-06-14 75 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 

焦點是緊密結合的系統集成,這樣文件/文件夾得到索引爲一旦它們被寫入文件系統,就不會有任何應用程序未被編入索引的問題。當然,您必須準備好處理多個響應...