问题标签 [propertyhandler]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
explorer - Windows 搜索在哪里查找文件属性?
我们已经为自定义文件格式实现了一个 shell 属性处理程序,其中包含一些标准属性和一些自定义属性。当我们在资源管理器中浏览我们的文件时,我们的属性会很好地显示,但是当我们的文件出现在搜索结果中时,它们却没有。似乎 Explorer 在显示搜索结果时并未查询我们的属性处理程序。
我的问题是:当资源管理器在搜索结果中显示一个项目时,它在哪里查找该项目的属性?它是查询适当的处理程序,还是在某种搜索缓存中的某处查找?
如果它查询处理程序,那么我将调查为什么我们的处理程序没有被调用。(可能是注册错误。)如果它在搜索缓存中查找,那么我将调查为什么我们的文件没有正确索引。
第二个问题:搜索结果窗格是否仅限于标准属性的有限子集?换句话说,我们应该放弃在这里展示有趣的属性吗?
一些观察:
- 我们的文件格式只是 .msg(Outlook 电子邮件)重命名为 .msga。我们的处理程序知道如何读取 .msg 文件格式。
- 属性值在浏览模式下正确显示。
- 它们不会在搜索模式下显示。
- 在任一模式下,属性值都会正确显示在资源管理器的详细信息窗格中。
- 一些标准属性在搜索结果中显示 OK,但其他属性则不显示,自定义属性也没有。例如,这些都显示 OK,但我们的处理程序不提供服务:
System.ItemName
,System.ItemUrl
,System.Size
,System.DateCreated
。这些在我们的处理程序中可用,但不显示:System.Title
、、、。System.Message.FromAddress
System.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 是我的用户帐户,所以我想知道它是否试图索引它没有权限的东西。
visual-c++ - Windows shell 是否支持多个 shell 属性处理程序?
我只是在尝试此处提供的 Recipe Property Handler 的 Windows 应用程序示例,我将其修改为用于.doc
文件而不是.recipe
文件:
但是,这似乎用它自己覆盖了以前的 Office 处理程序的属性,这就引出了一个问题,Windows shell 是否支持多个 shell 属性处理程序,或者对于给定的文件类型一次只能使用一个?如果可能的话,我在示例中的代码或逻辑中遗漏了什么?
我在 MSDN 上找不到这个问题的具体答案。