3

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

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

如果它查询处理程序,那么我将调查为什么我们的处理程序没有被调用。(可能是注册错误。)如果它在搜索缓存中查找,那么我将调查为什么我们的文件没有正确索引。

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

一些观察:

  • 我们的文件格式只是 .msg(Outlook 电子邮件)重命名为 .msga。我们的处理程序知道如何读取 .msg 文件格式。
  • 属性值在浏览模式下正确显示。
  • 它们不会在搜索模式下显示。
  • 在任一模式下,属性值都会正确显示在资源管理器的详细信息窗格中。
  • 一些标准属性在搜索结果中显示 OK,但其他属性则不显示,自定义属性也没有。例如,这些都显示 OK,但我们的处理程序不提供服务:System.ItemName, System.ItemUrl, System.Size, System.DateCreated。这些在我们的处理程序中可用,但不显示:System.Title、、、。System.Message.FromAddressSystem.Message.DateSent
  • Explorer 显然正在读取我们的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 是我的用户帐户,所以我想知道它是否试图索引它没有权限的东西。
4

0 回答 0