5

如何确定mdworker(Spotlight) 已完成第一次扫描?我基本上是在寻找小“。”的点。在聚光灯下的搜索图标将消失,您将能够执行搜索。(显然操作系统有一种方法来确定这一点,因为它会显示一个点,直到它准备好......)我没有看到任何东西mdutil,我在 Spotlight API 中找不到任何东西。

我目前正在使用 强制我自己的扫描同步mdimport,但这会引入很长的延迟(从几分钟到几小时,具体取决于我在哪里搜索的积极程度)并重复mdworker已经在做的工作。

任何解决方案(程序化、脚本化、文档化或无文档化)在这里都是公平的。

4

1 回答 1

1

我为此与 Apple 开了一个 DTS。答案是从 10.7 开始没有支持的方法来执行此操作。聚光灯搜索图标使用的“小点”由私有界面控制。

我的目标是获取已安装应用程序的清单。

我目前的解决方案是收集 /Applications 中使用fts和搜索名为“.app”的东西的所有应用程序的列表,并在进行时进行修剪,这样我就不会得到子应用程序。(这会更容易做到NSDirectoryEnumeration,但这段特殊的代码是在 C++ 中与 Core Foundation 一起做的。使用 会更容易CFURLEnumerator,但我需要支持 10.4。所以fts很好。)

扫描此列表非常快。一旦我知道盒子上的最小应用程序数量,我就会将其与system_profiler输出进行比较。如果system_profiler告诉我 /Applications 中的应用程序比我知道的少,那么我自己扫描所有捆绑包。否则,我使用来自system_profiler.

这并不理想,但它是一种不错的启发式方法,“大部分”是正确的,并且可以防止应用程序的严重漏报。

于 2012-03-31T15:16:32.660 回答