다음을 통해 공유


미리 보기 처리기 및 셸 미리 보기 호스트

미리 보기 처리기는 보기의 읽기 창에서 파일 내용의 가볍고 풍부하며 읽기 전용 미리 보기를 표시하도록 항목을 선택할 때 호출됩니다. 이 작업은 파일의 연결된 애플리케이션을 시작하지 않고 수행됩니다.

이 항목에서는 다음 항목에 대해 설명합니다.

미리 보기 처리기 아키텍처

미리 보기 처리기는 호스트된 애플리케이션입니다. 호스트에는 Windows Vista 또는 Microsoft Outlook 2007의 Windows 탐색기가 포함됩니다. 호스트는 미리 보기 처리기와 호스트 간의 통신 방법으로 IPreviewHandlerFrame 구현합니다.

미리 보기 처리기 자체는 다음 인터페이스를 구현합니다.

핸들러는 IObjectWithSite을 통해 호출되며, 이는 IUnknown 포인터를 반환합니다. 이를 통해 호스트와 상호 작용하기 위해 IPreviewHandlerFrame 개체를 요청합니다.

서버 모델 옵션

미리 보기 처리기는 항상 별도의 프로세스에서 실행됩니다. 이를 구현하는 방법에는 두 가지가 있습니다.

  1. 미리 보기 처리기는 인프로세스 서버로 빌드할 수 있으며, 아웃오브프로세스 서러게이트 호스트를 통해 실행할 수 있습니다. 이것이 기본 설정 방법입니다. 시스템은 Prevhost.exe 파일에서 이에 대한 서로게이트 호스트를 제공합니다. 이 방법으로 빌드된 미리 보기 처리기는 Windows XP의 Outlook 2007과 호환되지 않습니다. 그러나 이러한 동일한 처리기는 Windows Vista에서 실행되는 Windows 탐색기 및 Outlook 2007에서 작동합니다.
  2. 미리 보기 처리기는 로컬 COM(구성 요소 개체 모델) 서버로 빌드할 수 있습니다. 여러 가지 이유로 권장되지 않습니다. 첫째, In-Process 서버의 구현이 더 쉽습니다. 더 중요한 것은 in-process 서버로 구현하면 처리기 개체의 수명을 더 잘 제어할 수 있으므로 정리 및 효율성이 향상됩니다.

기본적으로 미리 보기 처리기는 보안상의 이유로 낮은 IL(무결성 수준) 프로세스에서 실행됩니다. 레지스트리에서 다음 값을 설정하여 필요에 따라 낮은 IL 프로세스로 실행을 사용하지 않도록 설정할 수 있습니다. 그러나 그렇게 하는 것은 권장되지 않습니다. 결국 시스템은 IL이 낮지 않은 모든 프로세스를 거부하도록 구성할 수 있습니다.

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

다른 미리 보기 처리기는 기본적으로 동일한 프로세스를 공유합니다. Prevhost.exe 두 인스턴스를 동시에 실행할 수 있습니다. 하나는 낮은 IL 프로세스로 실행되는 처리기용으로, 하나는 해당 동작을 옵트아웃한 처리기용입니다.

초기화

썸네일 및 속성 처리기와 마찬가지로 스트림을 사용하여 처리기를 초기화하는 것이 좋습니다. 필요한 경우 파일 또는 항목을 통해 초기화할 수 있지만 스트림은 처리기를 구현하는 가장 안전한 방법을 제공합니다. 스트림을 통해 초기화하면 버퍼 오버런으로부터 시스템을 보호하고, 처리기가 정보를 쓸 수 있는 위치를 제한하고, 다른 창과의 통신을 제한하는 등의 낮은 IL 프로세스로 처리기를 실행하는 시스템에 파일 무결성과 안정성 이점이 있습니다.

파일 또는 셸 항목을 사용하여 초기화해야 하는 경우 파일 경로 또는 IShellItem대한 참조를 저장합니다. IPreviewHandler::D oPreview 호출될 때까지 이러한 원본에서 데이터를 읽지 마세요.

일반적으로 초기화는 미리 보기 이미지 작성 및 저장과 같은 많은 작업을 수행해서는 안 됩니다. 최적의 효율성을 위해 미리 보기가 호출될 때까지 이러한 종류의 처리를 수행하면 안 됩니다.

미리 보기 처리기 데이터 흐름

미리 보기 프로세스의 데이터 흐름은 여기에 표시된 일반 경로를 따릅니다. 호스트는 Windows Vista 또는 Outlook 2007에서 Windows 탐색기라고 할 수 있습니다.

  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"로 설정합니다. 기본 Prevhost.exe AppID대신 해당 AppID 하위 키를 사용합니다.

처리기는 새로운 프로세스를 제공함으로써 기본적으로 공유 프로세스에서 실행되는 것을 피할 수 있습니다. 예를 들어 프로세스에서 특정 버전의 CLR(공용 언어 런타임)을 보장할 수 있습니다. 이는 미리 보기 처리기의 관리되는 구현을 빌드하는 경우에 필요합니다.

메모

32비트 미리 보기 처리기는 64비트 운영 체제에 설치된 경우 AppID {534A1E02-D58F-44f0-B58B-36CBED287C7C}을 사용해야 합니다.

 

빌드 미리 보기 처리기

미리 보기 처리기 등록하는 방법

미리 보기 처리기 지침