Windows Search在哪里查找文件属性?

时间:2016-03-22 02:06:38

标签: explorer propertyhandler

我们为自定义文件格式实现了一个shell属性处理程序,包含一些标准属性和一些自定义属性。当我们在资源管理器中浏览我们的文件时,我们的属性可以很好地显示,但是当我们的文件出现在搜索结似乎资源管理器在显示搜索结果时没有查询我们的属性处理程序。

我的问题是:当资源管理器在搜索结果中显示某个项目时,它在哪里查找该项目的属性?它是否查询相应的处理程序,或者它是否在某种搜索中显示某个位置缓存?

如果它查询处理程序,那么我将调查为什么不调用我们的处理程序。 (也许这是一个注册错误。)如果它在搜索缓存中查找,那么我将调查为什么我们的文件没有正确编入索引。

第二个问题:搜索结果窗格是否仅限于标准属性的有限子集?换句话说,我们应该放弃尝试在此处显示有趣的属性吗?

一些观察结果:

  • 我们的文件格式只是.msg(Outlook电子邮件)重命名为.msga。我们的处理程序知道如何读取.msg文件格式。
  • 在浏览模式下正确显示属性值。
  • 它们不会以搜索模式显示。
  • 在资源管理器的详细信息窗格中,可以在任一模式下正确显示属性值。
  • 某些标准属性在搜索结果中显示为“确定”,但在其他属性中不显示,并且没有自定义属性。例如,这些都显示正常但我们的处理程序不提供:System.ItemNameSystem.ItemUrlSystem.SizeSystem.DateCreated。这些可在我们的处理程序中使用,但不显示:System.TitleSystem.Message.FromAddressSystem.Message.DateSent
  • 资源管理器显然正在阅读我们的HKCR\<progid>注册表项,因为我们编辑ContentViewModeForSearch等时显示会适应。
  • 我们的.msga文件类型在控制面板中列为索引文件类型,我们的文件位于索引目录中。我今天早上重建了整个索引。
  • 我们还没有实现过滤器。控制面板表示它正在为.msga使用“Office Outlook MSG IFilter”。 (我不知道它是如何解决这个问题的 - 也许我在项目早期复制了一个注册表设置,或者Windows推断它是因为我们使用Outlook进行预览。)
  • 我们的处理程序实现了IPropertyStore,但它的方法似乎永远不会被调用。 (我们已经对搜索索引器应该访问的文件实现了一些日志记录,但我们无法确定这一点。)
  • 事件查看器在索引编制期间显示收集器错误3036:“The content source <csc://{S-1-5-21-2153095834-1917727522-598830505-500}/> cannot be accessed.”我认为SID是我的用户帐户,所以我想知道它是否正在尝试索引它没有权限的内容。

0 个答案:

没有答案