12

我最近看到一篇关于 Windows 7 新的联合搜索和搜索连接器的文章。基本上,您为用户提供一个小的 XML 文件(.osdx;一个 OpenSearch XML 文件),然后他们可以使用 Explorer 搜索您拥有的任何内容。这些搜索连接器实际上很容易实现——资源管理器通过查询调用您的 URL,您只需将结果作为 RSS 返回。

伟大的。我目前正在开发一个网络应用程序,这种功能可能是提供给我的用户的一个不错的额外功能。所以我安装了示例 .osdx 并进行了尝试。它的工作原理与宣传的差不多:


(来源:msdn.com

这很酷,但我希望我的搜索结果可以从“开始”菜单中获得。重点(在我看来)是在应用程序本身尚未打开时轻松、快速且直接地访问我的网络应用程序中的项目。如果我必须打开资源管理器窗口,请单击我的搜索连接器,然后搜索,这与仅打开浏览器并在 Web 应用程序中进行搜索有什么区别?

这是我尝试过的:

  • 安装 .osdx 后,连接器保存为%UserProfile%\Searches\name.searchConnector-ms. 此文件夹中的其他项目包括 Outlook 的连接器。查看该文件,有一个非常有前途的节点,名为<includeInStartMenuScope>. 我将此节点添加true到 Channel 9 连接器,但没有运气。(我什至尝试重新启动。)
  • 我遇到了一个问了差不多一年的问题。接受的答案将我们引导至 Windows API 代码包,但它仅提供用于使用Windows 搜索的类,而不是实现搜索提供程序。
  • 来自 Scott Hanselman 的注册表技巧。但是,这 (a) 仅固定一个链接来运行搜索,而不是包含内联结果,并且 (b) 对我不起作用,因为我(也不能指望我的用户)拥有 Windows 7 Ultimate。

那么,如何为“开始”菜单的即时搜索提供项目?理想情况下,我只想配置要包含的搜索连接器的结果,但我不反对在 C# 中连接一些将安装在客户端计算机上的东西。

4

1 回答 1

2

传统上,扩展 Windows 搜索的方法是通过允许 Windows 理解新类型文件的IFilter 。这种方法肯定会将您与“开始”按钮的结果联系起来。

在这种情况下,您正在处理联合搜索,这使得在线内容的行为就好像它存在于用户的计算机上一样。

不幸的是,我找不到任何明显解决您问题的方法。因此,您可能必须分两部分构建一个 kludge:

  1. 用于搜索结果的 IFilter(例如,“*.C9”文件)。
  2. 以“C9”结尾的文件。

顺便说一句,如果您对术语“IFilter”进行网络搜索并转到前几个搜索结果,您可能会认为由于页面顶部的注释而不再使用 IFilter。

如果发生这种情况,那么您在旧的 IFilter 站点。有关此主题的 MSDN 文档的当前 URL 位于http://msdn.microsoft.com/en-us/library/bb266451(v=VS.85).aspx

最后一点警告:

在 Windows 7 及更高版本中,以托管代码编写的筛选器被显式阻止。由于运行多个加载项的进程存在潜在的 CLR 版本控制问题,过滤器必须使用本机代码编写。

于 2010-10-05T09:28:03.047 回答