다음을 통해 공유


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

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

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

미리 보기 처리기 아키텍처

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

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

처리기는 IObjectWithSite를 통해 호출됩니다. 이 포인터는 IPreviewHandlerFrame 개체를 호스트와 상호 작용하도록 요청하는 IUnknown 포인터를 반환합니다.

서버 모델 옵션

미리 보기 처리기는 항상 프로세스가 부족합니다. 이를 구현하는 방법에는 두 가지가 있습니다.

  1. 미리 보기 처리기는 In-Process 서버로 빌드할 수 있지만 Out-of-process 서로게이트 호스트를 통해 실행할 수 있습니다. 이는 선호되는 방법입니다. 시스템은 Prevhost.exe 파일에서 이에 대한 서로게이트 호스트를 제공합니다. 이 방법으로 빌드된 미리 보기 처리기는 Windows XP의 Outlook 2007과 호환되지 않습니다. 그러나 이러한 동일한 처리기는 Windows Vista에서 실행되는 Windows Explorer 및 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가 호출될 때까지 이러한 원본에서 데이터를 읽지 마세요.

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

미리 보기 처리기 Data Flow

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

  1. 미리 보기 처리기는 스트림을 사용하여 초기화되는 것이 좋습니다.
  2. 보기 창은 IPreviewHandler::SetWindow를 통해 호스트에서 처리기로 전달됩니다.
  3. 이 시점에서 처리기는 IPreviewHandler::D oPreview 가 호출될 때까지 더 이상 아무 것도 수행하지 않아야 합니다.
  4. 미리 보기는 IPreviewHandler::D oPreview 호출을 통해 읽기 창에 표시됩니다.
  5. 창의 크기는 IPreviewHandler::SetRect를 통해 설정됩니다.
  6. IPreviewHandler::SetRect를 통해 필요한 경우 창의 크기가 조정됩니다.
  7. 미리 보기가 언로드되고 더 이상 필요하지 않을 때 IPreviewHandler::Unload 호출을 통해 리소스가 해제됩니다.

미리 보기 처리기 디버깅

미리 보기 처리기를 in-process 서버로 구현하기 위한 권장 사항을 따른 경우 미리 보기 처리기를 디버그하려면 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}를 사용해야 합니다.

 

미리 보기 처리기 빌드

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

미리 보기 처리기 지침