共用方式為


預覽處理程式和 Shell 預覽主機

選取專案以顯示在檢視讀取窗格中檔案內容的唯讀 預覽時,會呼叫預覽處理程式。 這會在未啟動檔案的相關聯應用程式的情況下完成。

本主題討論下列主題:

預覽處理程序架構

預覽處理程式是裝載的應用程式。 主機包含 Windows Vista 中的 Windows 檔案總管或 Microsoft Outlook 2007。 主機負責實作 IPreviewHandlerFrame,以作為預覽處理程式與主機之間的通訊方法。

預覽處理程式本身會實作這些介面:

您的處理程式會透過其 IObjectWithSite進行呼叫,然後傳回一個 IUnknown 指標,通過該指標,您可以請求一個 IPreviewHandlerFrame 物件來與主機互動。

伺服器模型選項

預覽處理程式總是在進程外執行。 實作此動作的方法有兩種:

  1. 預覽處理程式可以建置為內進程伺服器,但會透過外進程代理主機執行。 這是慣用的方法。 系統會在 Prevhost.exe 檔案中為此提供代理主機。 此方法所建置的預覽處理程式與 Windows XP 上的 Outlook 2007 不相容。 不過,這些相同的處理程式將會在 Windows Vista 上執行的 Windows 檔案總管和 Outlook 2007 中運作。
  2. 預覽處理程式可以建置為本地元件物件模型 (COM)伺服器。 基於數個原因,不建議這麼做。 首先,內部進程伺服器的實作會比較容易。 更重要的是,作為進程內伺服器的實作可提供對處理程序物件生命週期的更大控制,這樣可以實現更好的清理和效率。

根據預設,基於安全性考慮,預覽處理程式會在低完整性層級 (IL) 程序中執行。 您可以選擇性地停用以低 IL 進程執行,方法是在登錄中設定下列值。 不過,不建議這麼做。 系統最終可能會設定為拒絕任何不低 IL 的程式。

HKEY_CLASSES_ROOT
   CLSID
      {YOUR HANDLER'S CLSID}
         DisableLowILProcessIsolation [DWORD] = 1

根據預設,不同的預覽處理程式會共用相同的進程。 Prevhost.exe 的兩個實例可以同時執行,一個用於執行為低 IL 進程的處理程式,另一個用於選擇不執行該行為的處理程式。

初始化

如同縮略圖和屬性處理程式,強烈建議您使用流初始化處理程式。 您可以視需要透過檔案或專案初始化,但數據流會提供最安全的方式來實作處理程式。 透過數據流初始化可確保檔案完整性和穩定性優點,讓執行處理程式的系統成為低 IL 進程,例如保護系統免於緩衝區滿溢、限制處理程式可以寫入資訊的位置,以及限制與其他窗口的通訊。

如果您必須使用檔案或 Shell 專案初始化,請將檔案路徑或參考儲存至 IShellItem。 在呼叫 IPreviewHandler::D oPreview 之前,請勿從這些來源讀取數據。

一般而言,初始化不應該執行任何繁重的工作,例如撰寫和儲存預覽影像。 為了達到最佳效率,在呼叫預覽之前,不應該執行這類處理。

預覽處理程序數據流

預覽程式中的數據流遵循此處所示的一般路徑。 可以將主機視為 Windows Vista 的 Windows 檔案總管或 Outlook 2007。

  1. 預覽處理程式會初始化,最好是使用數據流。
  2. 檢視視窗會透過 IPreviewHandler::SetWindow,從主機傳遞至處理程式。
  3. 此時,在呼叫 IPreviewHandler::D oPreview 之前,處理程式應該不會再執行任何動作。
  4. 預覽顯示在閱覽窗格中,透過呼叫 IPreviewHandler::DoPreview
  5. 視窗的大小是透過 IPreviewHandler::SetRect設定
  6. 視需要透過 IPreviewHandler::SetRect調整視窗大小。
  7. 透過呼叫 IPreviewHandler::Unload,預覽畫面會卸載,當不再需要時釋放其資源。

偵錯預覽處理程式

如果您已遵循建議,將預覽處理程式實作為同進程伺服器,若要對預覽處理程式進行偵錯,您可以附加至 Prevhost.exe。 如先前所述,請注意,可能有兩個 Prevhost.exe實例,一個用於一般低 IL 進程,另一個用於那些選擇不以低 IL 進程運行的處理程式。

如果您在可用的進程清單中找不到 Prevhost.exe,可能尚未在該時間點載入。 點擊檔案以預覽會載入代理程式,然後它應該會顯示為可附加的程序。

提供自己的預覽處理常式

如果您想要強制為處理程式建立新的進程,而不是在默認進程下執行,請在 AppID 下建立處理程式的新子機碼,並將其 DllSurrogate 專案設定為 “Prevhost.exe”。 請使用 AppID 子機碼,而不是預設 Prevhost.exe AppID

藉由提供新的程序,處理器可以避免在共用程序下運行,因為它預設會這樣運行。 例如,這可讓您確保在處理過程中使用特定版本的 common language runtime (CLR)。 如果您要建置預覽處理程式的 Managed 實作,則需要此專案。

注意

在 64 位作系統上安裝時,32 位預覽處理程式應該使用 AppID {534A1E02-D58F-44f0-B58B-36CBED287C7C} 。

 

建立預覽處理程式

如何註冊預覽處理程式

預覽處理程序指導方針