共用方式為


Windows Search 做為開發平台

若要為新檔格式和數據存放區的內容和屬性編製索引,Microsoft Windows Search 必須使用載入巨集來擴充。

在新的檔格式和數據存放區的第三方開發人員可以取得這些格式和數據存放區,才能在 Windows 檔案總管中出現在查詢結果中,開發人員必須執行下列三件事:

  • 實作Shell數據源以擴充Shell命名空間。
  • 公開數據存放區中的專案(如果是新增數據存放區,因為需要編製索引)。
  • 開發通訊協議處理程式,讓 Windows 搜尋可以存取索引的數據。

本主題的組織方式如下:

快速入門

開始建立 Windows 搜尋應用程式之前,請記住,執行應用程式的慣用方式是透過 Shell 數據源。 Shell 數據源會擴充Shell命名空間,並公開數據存放區中的專案。 然後,Windows 搜尋系統可以使用通訊協議處理程式來編製數據存放區中的專案索引。 實作Shell數據源來存取 Windows Search 的間接方法是慣用的方法,因為它提供完整Shell功能的存取權。 如此一來,可確保合理的用戶體驗。

如果您想要讓查詢結果出現在 Windows 檔案總管中,您必須先實作 Shell 數據源,才能建立通訊協定處理程式來擴充索引。 不過,如果所有查詢都會以程式設計方式進行(例如透過 OLE DB),並由應用程式的程式代碼而非Shell解譯,則殼層命名空間仍為慣用,但並非必要。

Windows 需要通訊協定處理程式,才能取得檔案內容的知識,例如資料庫或自定義檔類型中的專案。 雖然 Windows 搜尋可以編制檔案的名稱和屬性的索引,但 Windows 並不知道檔案的內容。 因此,這類項目無法在 Windows 殼層中編製索引或公開。 藉由實作自定義通訊協定處理程式,您可以公開這些專案。 如需您所嘗試達成之開發人員案例所識別的處理程式清單,請參閱 處理程式概觀。

搜尋開發案例概觀

Windows 搜尋中最常見的開發案例如下:

新增數據存放區

只有當您要加入要編製索引的新數據存放區時,才需要 Windows 搜尋的 Shell 資料存放區。 數據存放區是數據存放庫,可以使用Shell數據源,以容器的形式公開給Shell程式設計模型。 然後,Windows 搜尋系統可以使用通訊協議處理程式來編製數據存放區中的專案索引。 通訊協議處理程式會實作通訊協定,以原生格式存取內容來源。 ISearchProtocolISearchProtocol2 介面可用來實作自定義通訊協定處理程式,以擴充可編製索引的數據源。 如需建立Shell數據源的相關信息,請參閱 實作基本資料夾物件介面

新增檔案格式

如果您新增自定義檔格式,則需要開發篩選處理程式或屬性處理程式,但不能同時開發兩者。 篩選條件是IFilter 介面的實作 它會開啟特定檔類型的檔案,並篩選索引器的屬性和文字區塊。 篩選條件與文件類型相關聯,如擴展名、MIME 類型或類別識別碼 (CLSID) 表示。 雖然一個篩選可以處理多個檔類型,但每個檔類型只能使用一個篩選條件。

屬性處理程式會將儲存在檔案中的數據轉譯成結構化架構,由 Windows 檔案總管、Windows 搜尋和其他應用程式存取。 然後,這些系統可以與屬性處理程序互動,以寫入和讀取檔案中的屬性。 翻譯的數據包括詳細數據檢視、資訊提示、詳細數據窗格、屬性頁等等。 每個屬性處理程式都會與擴展名所識別的特定檔類型相關聯。 您需要屬性處理程式才能執行下列動作:

  • 在UI中顯示非索引項目屬性。
  • 支援寫入屬性。

使用 Windows 搜尋結果

下列各節說明數種取用 Windows 搜尋結果的方式:

查詢資料

開發人員可以在合併的 Windows 搜尋和 Windows 屬性系統之上撰寫應用程式,不論應用程式或檔案類型為何,都可以存取檔案和專案。 應用程式有兩種方式可存取索引器資料:

  • 應用程式會將 Windows 搜尋 結構化查詢語言 (SQL) (SQL) 查詢傳送至 Windows 搜尋 OLE DB 提供者以擷取結果,直接與 OLE DB 通訊。 您可以手動建構查詢,或使用 ISearchQueryHelper 介面從搜尋關鍵詞產生 SQL,以及進階查詢語法 (AQS)。
  • 應用程式會透過殼層運作。 Shell 層的優點是它也支援 grep 等其他來源。 不過,缺點是並非所有索引器功能都可以使用。

另一個選項是使用 search-ms:// 和 search:// 通訊協定,以執行透過 Windows 檔案總管轉譯的 URL 型搜尋。 此選項會啟用最輕量開發,但不會從結果檢視傳回結果或使用者選取專案給呼叫的應用程式。 此外,與其他通訊協定一樣,如果應用程式符合所需的功能集,第三方搜尋應用程式可以接管 search-ms:// 和 search:// 通訊協定。 如需查詢的詳細資訊,請參閱以程式設計方式查詢 Windows 搜尋中的查詢程式和查詢索引。

在 Windows 7 和更新版本中,同盟搜尋提供新的搜尋提供者,可透過網頁伺服器、透過 OpenSearch 通訊協定查詢遠端資料存放區,並將結果列舉為 RSS 或 Atom XML 摘要。 搜尋連接器是命名空間連接點,可使用搜尋提供者來模擬資料夾行為。 如需在 Windows 7 中搜尋同盟至遠端資料存放區的詳細資訊,請參閱 Windows 中的同盟搜尋。

編製檔案和專案的索引

編製索引的內容是根據 Windows 搜尋隨附的載入巨集所支援的檔案和資料別,以及文件系統中資料夾的預設包含和排除規則。 例如,視窗搜尋中包含的篩選支持超過 200 種常見的數據類型,包括Microsoft Office 檔、Microsoft Outlook 電子郵件(搭配 MAPI 通訊協定處理程式)、純文本檔案、HTML 等等。 如需原生支援的檔案類型完整清單,請參閱 索引中包含的內容。

您可以使用屬性處理程式和篩選來擴充索引,以將新檔格式的內容和屬性公開至索引和 Windows 檔案總管。 篩選是 IFilter 介面的實作 有兩種篩選:一種是與個別項目互動,例如檔案,另一種是與資料夾等容器互動的專案。 篩選是多用途,因為它們支援區塊化數據、文字內容、某些屬性和多種語言。

相反地,屬性處理程式具有更明確的用途:公開擴展名所識別的特定文件類型屬性。 檔類型的屬性處理程式可以啟用 get 和 set 屬性,並可列舉與該檔類型相關聯的屬性。 不同於篩選,屬性處理程式不支援擷取數據或文字內容,而且屬性處理程式無法指出文字屬性在何種語言,除非它們支援寫入屬性。

為數據存放區編製索引

索引可以使用通訊協議處理程式來擴充,以提供專屬數據存放區的存取權。 例如,非文件系統數據存放區中包含的檔案和專案(例如資料庫和電子郵件存放區)需要通訊協定處理程式從 URL 對應至數據流。 通訊協議處理程式也可以選擇性地判斷用來從數據流擷取資訊的正確篩選。 篩選會列舉數據存放區 URL。 然後,專案會使用適當的篩選和/或屬性處理程式個別編製索引。 如需詳細資訊,請參閱 擴充索引

管理編製索引程式

應用程式開發人員可以使用各種管理介面來控制 Windows 搜尋服務索引的範圍和頻率。 這些介面包括新增和移除索引器掃描變更的目錄、手動通知索引數據變更、檢查索引器的狀態,以及強制重新編製部分或所有數據的索引。 如需詳細資訊,請參閱 管理索引

整合 Windows 屬性系統與 Windows 搜尋應用程式

Windows 屬性系統是可延伸的數據定義讀取/寫入系統,可提供一種統一方式來表達有關 Shell 專案的元數據。 Windows Vista 和更新版本中的 Windows 屬性系統可讓您儲存和擷取 Shell 專案的元數據。 Shell 專案是任何單一內容,例如檔案、資料夾、電子郵件或連絡人。 屬性是與Shell專案相關聯的個別元數據片段。 屬性值會以 PROPVARIANT 結構表示。

一些常見的項目類型包括廣泛的通用屬性清單,例如相片、音樂、檔、訊息、聯繫人和檔案。 如果沒有任何現有屬性符合其需求,開發人員也可以將自己的屬性引入平臺。 如需整合應用程式與 Windows 屬性系統的詳細資訊,請參閱 開發屬性處理程式

處理程式概觀

處理程式是元件物件模型 (COM) 物件,可提供Shell專案的功能。 大部分的Shell數據源都會提供可延伸的系統,以便將處理程式系結至專案。 例如,檔案系統資料夾會使用關聯系統來查閱特定檔類型的處理程式。 每個檔案類型都需要特定的處理程式。 Adobe Acrobat .pdf 檔案類型需要一個篩選處理程式,例如,.doc檔格式需要另一個篩選處理程式等等。

不同的處理程式有一些共通性。 在 Windows Vista 和更新版本中,所有處理程式都必須使用下列其中一個介面來初始化處理程式:IInitializeWithStreamIInitializeWithItem IItinitializeWithFile。

下表列出高階開發人員工作、每個工作所需的處理程序類型,並提供有關如何執行每個工作的概念信息連結。

Task 處理常式 概念資訊
存取檔案的屬性以進行索引編製 屬性處理程式 開發屬性處理程式
自訂檔案格式的系統定義屬性
為項目的數據物件 (IDataObject) 新增剪貼簿格式 (資料物件用於拖放和複製/貼上案例中。 資料物件處理常式 建立數據處理者
為通常顯示在快捷方式功能表中的專案新增動詞 快捷功能表處理程式 建立操作功能表處理程式
使用動態動詞自定義快捷方式功能表
將檔類型與特定圖示產生關聯 圖示處理程式 建立圖示處理程式
使用UI圖片和控制項建立屬性表,以允許與文件類型進行自定義互動 屬性工作表處理常式 屬性表處理程式
啟用專案類型以支援拖放和複製/貼上案例 卸除處理程式 使用拖放和剪貼簿傳輸殼層物件
擷取用於編製索引的文字和文件屬性區塊 篩選處理程式 開發篩選處理程式
編製新文件類型的索引 篩選處理程式、屬性處理程式 開發篩選處理程式
開發屬性處理程式
為數據存放區的內容編製索引 通訊協定處理常式 開發通訊協議處理程式
在 Windows 檔案總管預覽窗格中預覽殼層項目的簡化檢視 預覽處理程式 預覽處理程式
當滑鼠停留在UI物件上時提供快顯文字 資訊提示處理常式 建立殼層延伸模組處理程式 (資訊提示自訂)
提供靜態影像來代表Shell專案 縮圖處理程式 縮圖處理程式

 

下表列出用於實作每個處理程式類型的處理程式和介面。

處理常式 介面
卸除處理程式 IDropTarget、IDropTargetHelperIPersistFileIShellExtInit
資料物件處理常式 IDataObjectIPersistFile
篩選處理程式 IFilter
圖示處理程式 IExtractIcon
選擇性: IPersistIPersistFile
資訊提示處理常式 IQueryInfo
預覽處理程式 IPreviewHandler
屬性處理程式 IPropertyStore
通訊協定處理常式 IFilterISearchProtocolIUrlAccessor
選擇性: ISearchProtocol2IUrlAccessor2IUrlAccessor3IUrlAccessor4
屬性工作表處理常式 IShellExtInitIShellPropSheetExt
快捷功能表處理程式 IContextMenuIExplorerCommandIShellExtInit
縮圖處理程式 IThumbnailProvider

 

注意

屬性處理程式有時是kown做為元數據處理程式。 Shell 數據源有時稱為Shell命名空間延伸模組。 檔類型處理程式有時稱為Shell延伸模組處理程式或Shell擴展名。

 

如需建立處理程式的詳細資訊,請參閱 建立殼層延伸模塊處理程式。 如需屬性的詳細資訊,請參閱 Windows 屬性系統

載入巨集安裝程序指導方針

建立載入巨集安裝程式時,請使用下列指導方針:

  • 安裝程序必須使用 EXE 或 MSI 安裝程式。
  • 必須提供版本資訊。
  • 必須為每個已安裝的載入巨集建立 [新增/移除程式] 專案。
  • 安裝程式必須接管目前載入巨集所瞭解之特定檔類型或儲存的所有登錄設定。
  • 如果覆寫先前的載入巨集,安裝程式應該通知使用者。
  • 如果較新的載入巨集已覆寫先前的載入巨集,使用者應該能夠還原先前載入巨集的功能,並再次成為該文件類型或存放區的預設載入巨集。

實作者的注意事項

建立篩選或屬性處理程式之前,開發人員應該考慮下列事項:

  • 這些處理程式是載入您不受控制之進程的同進程延伸模組,例如篩選精靈進程、Windows 檔案總管(grep 搜尋)和第三方主機,例如 Windows Mail。
  • 您必須撰寫足夠健全的安全程序代碼,以處理為了攻擊系統而建立之檔格式的任意損毀形式。
  • 載入巨集不得外泄將產生主機進程問題的資源。
  • 載入巨集不得當機,因為這也會導致主機進程當機,並減緩篩選程式的速度。
  • 由於這些處理程式是在背景系統進程中執行,因此它們必須以最少的CPU和I/O執行,以符合系統的效能需求。

因此,這些載入巨集應該由具有建立系統層級程式代碼專業知識的開發人員撰寫。

其他資源

Windows Search 概觀

Windows 搜尋支持的語言

搭配 Shell 資料和 Windows Search 使用 Managed 程式碼

Windows 搜尋開發人員指南