2012-01-03 6 views
5

mdworker(Spotlight)が最初のスキャンを完了したと判断するにはどうすればよいですか?私は基本的に、少しの "ポイント"を探しています。スポットライトの検索アイコンが消えると、検索を実行できます。 (明らかに、OSは準備ができるまでドットを表示するので、これを判断する方法があります...)私はmdutilから何も見ていないので、Spotlight APIで何も見つけることができません。mdworker(Spotlight)が最初のスキャンを完了したかどうかを確認

私は現在、mdimportを使用して同期スキャンを強制していますが、これは、どれくらい積極的な検索をしているかによって時間がかかります(mdworker)。

解決策(プログラム、スクリプト、文書化、または文書化されていない)は、ここでは公正なゲームです。

答えて

1

アップルではこれ用にDTSを開設しました。答えは、10.7時点でこれを行うためのサポートされた方法がないということです。スポットライト検索アイコンが使用する「小さな点」は、プライベートインターフェイスで制御されます。

私の目標は、インストールされたアプリケーションのインベントリを取得することでした。

私の解決策は、/アプリケーション内のすべてのアプリケーションのリストをftsで収集し、「.app」という名前のものを検索し、サブアプリケーションを取得しないようにプルーニングすることです。 (これはNSDirectoryEnumerationを行うには容易になるだろうが、このコードの特定の部分は、Core FoundationのとC++である。CFURLEnumeratorをどうする容易になるだろうが、私は10.4をサポートする必要がある。だから、ftsで結構です。)

スキャンこのリストは非常に高速です。ボックスに表示されるアプリケーションの最小数を知ったら、それをsystem_profilerの出力と比較します。 system_profilerが、私が知っているよりも少ないアプリケーションが/アプリケーションにあると伝えたら、私は自分自身ですべてのバンドルをスキャンします。それ以外の場合は、system_profilerの出力を使用します。

これは理想的ではありませんが、それはまともなヒューリスティックであり、 "ほとんど"適切であり、アプリケーションの過小な過小報告を防ぎます。

関連する問題