2012-01-03 95 views
5

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

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

任何解决方案(编程,脚本,记录或无证)都是公平的游戏。

回答

1

我用Apple为此打开了一个DTS。答案是,从10.7开始没有支持的方式来执行此操作。 Spotlight搜索图标使用的“小点”由专用界面控制。

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

我现在的解决方案是使用fts收集所有应用程序在/ Applications中的列表,并搜索名为“.app”的东西,并在我去时进行修剪,因此我没有获得子应用程序。 (这将是更容易NSDirectoryEnumeration做,但是这个代码特定部分是用C++与核心基础,它会更容易与CFURLEnumerator做的,但我需要支持10.4,所以fts是好的。)

扫描这个清单非常快。一旦我知道盒子上的最小应用数量,我就会将其与system_profiler输出的结果进行比较。如果system_profiler告诉我,应用程序中的应用程序数量比我所知的少,那么我会自己扫描所有的软件包。否则,我使用system_profiler的输出。

这不是理想的,但它是一个体面的启发式,是“主要”正确的,并防止应用程序的大量低报。