5

識別子によるバンドルの検索に似た質問ですが、別の問題があります。

IDで互いのバンドルを見つける必要のあるアプリケーションがいくつかあります。すべてのアプリケーションを完全にフレッシュインストールしない限り、これは常にうまく機能します。多くの場合、バンドルの場所を知るには、ファインダーをインストール場所に向けるだけで十分ですが、それでも不十分な場合もあります。バンドルIDを使用してパスを見つける前に、まずアプリケーションを実行する必要があります。アプリケーションを/Applications/にコピーするインストーラーを使用しているため、アプリをインストールしてもファインダーが開かないことに注意してください。

アプリケーションバンドルが新しくインストールされた場合、バンドルIDをバンドルの場所にマップする内部レジストリが更新されるまでにシステムに時間がかかるようです。私が知りたいのは:

  1. これらのマッピングはどこで維持され、
  2. システム/ファイルマネージャー/ワークスペース(?)にマップを更新させるにはどうすればよいですか?
4

2 に答える 2

3

マッピングは、LaunchServicesデータベースで維持されます。これが保存されている場所はわかりませんが、目標を達成するためのより良い方法があるため、正確な場所は関係ありません。

Launch Servicesデータベースはさまざまな方法で手動で更新できますが、個人的には、特に状況によっては、プログラムで更新する方が簡単だと思います。その場合は、Launch Services APIを利用します。具体的には、を使用することを検討しLSRegisterURL()ます。これにより、やりたいことが達成されるようです。

データベースへのアプリケーションの登録と、これが一般的にどのように機能するかについての詳細は、LaunchServicesのドキュメントを参照してください。

于 2009-06-14T19:30:40.387 に答える
3

kMDItemCFBundleIdentifier別の方法として、必要な場合は、次のキーを使用してSpotlightAPIを使用して検索することもできます。

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

Spotlightはシステムと緊密に統合されているため、ファイル/フォルダーがファイルシステムに書き込まれるとすぐにインデックスが作成されます。アプリがまだインデックスに登録されていないという問題は発生しません。もちろん、複数の応答を処理する準備ができている必要があります…</ p>

于 2012-04-08T16:37:24.123 に答える