Udostępnij za pośrednictwem


Programy obsługi podglądu i host podglądu powłoki

Programy obsługi podglądu są wywoływane po wybraniu elementu w celu wyświetlenia lekkiej, bogatej tylko do odczytu podglądu zawartości pliku w okienku odczytu widoku. Odbywa się to bez uruchamiania skojarzonej aplikacji pliku.

W tym temacie omówiono następujące tematy:

Architektura obsługi podglądu

Obsługa podglądu jest hostowaną aplikacją. Hosty obejmują Eksploratora Windows w systemie Windows Vista lub Microsoft Outlook 2007. Hosty implementują IPreviewHandlerFrame jako metodę komunikacji między obsługą podglądu a hostem.

Sama procedura obsługi w wersji zapoznawczej implementuje następujące interfejsy:

Procedura obsługi jest wywoływana za pośrednictwem IObjectWithSite, która zwraca wskaźnik IUnknown, za pomocą którego żądasz obiektu IPreviewHandlerFrame interakcji z hostem.

Opcje modelu serwera

Programy obsługi podglądu zawsze działają poza procesem. Istnieją dwie metody implementacji:

  1. Program obsługi podglądu można zbudować jako serwer działający w procesie, ale działa przez hosta zastępczego poza procesem. Jest to preferowana metoda. System udostępnia dla tego hosta zastępczego w pliku Prevhost.exe. Programy obsługi w wersji zapoznawczej utworzone przez tę metodę nie są zgodne z programem Outlook 2007 w systemie Windows XP. Jednak te same programy obsługi będą działać w Eksploratorze Windows i programie Outlook 2007 uruchomionym w systemie Windows Vista.
  2. Program obsługi w wersji zapoznawczej można skompilować jako lokalny serwer modelu obiektów składników (COM). Nie jest to zalecane z kilku powodów. Po pierwsze, implementacja serwera wewnątrzprocesowego jest łatwiejsza. Co ważniejsze, implementacja jako serwer przetwarzania zapewnia większą kontrolę nad okresem istnienia obiektu programu obsługi, co pozwala na lepsze oczyszczanie i wydajność.

Domyślnie programy obsługi w wersji zapoznawczej są uruchamiane w procesie niskiego poziomu integralności (IL) ze względów bezpieczeństwa. Można opcjonalnie wyłączyć uruchamianie jako proces o niskim poziomie integralności, ustawiając następującą wartość w rejestrze. Nie zaleca się jednak tego robić. Systemy można ostatecznie skonfigurować tak, aby odrzucały każdy proces, który nie jest niski IL.

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

Różne programy obsługi w wersji zapoznawczej domyślnie współużytkuje ten sam proces. Dwa wystąpienia Prevhost.exe mogą być uruchomione jednocześnie; jedno dla programów obsługi działających jako procesy o niskim poziomie IL, drugie dla tych, które zrezygnowały z takiego sposobu działania.

Inicjalizacja

Podobnie jak w przypadku obsługiwarek miniatur i właściwości, zdecydowanie zaleca się zainicjowanie obsługiwarki przy użyciu strumienia. W razie potrzeby można zainicjować plik lub element, ale strumienie zapewniają najbezpieczniejszy sposób implementowania procedury obsługi. Inicjowanie przez strumień zapewnia integralność plików oraz stabilność systemu dzięki uruchamianiu programu obsługi jako procesu o niskim poziomie integralności, zapewniając ochronę przed przepełnieniami buforu, ograniczenie miejsc, w których program obsługi może zapisywać informacje, oraz ograniczenie komunikacji z innymi oknami.

Jeśli musisz zainicjować za pomocą pliku lub elementu powłoki, zapisz ścieżkę do pliku lub odwołanie do IShellItem. Nie odczytuj danych z tych źródeł, dopóki nie zostanie wywołana IPreviewHandler::DoPreview.

Ogólnie rzecz biorąc, inicjowanie nie powinno wykonywać żadnej ciężkiej pracy, takiej jak komponowanie i przechowywanie obrazu podglądu. W celu uzyskania optymalnej wydajności tego rodzaju przetwarzanie nie powinno być wykonywane do czasu, gdy nie zostanie wywołany podgląd.

Przepływ danych programu obsługi w wersji zapoznawczej

Przepływ danych w procesie podglądu jest zgodny z ogólną ścieżką pokazaną tutaj. Host można porównać do Eksploratora Windows w systemie Windows Vista lub do Outlooka 2007.

  1. Procedura obsługi w wersji zapoznawczej jest inicjowana, najlepiej ze strumieniem.
  2. Okno widoku jest przekazywane z hosta do programu obsługi za pośrednictwem IPreviewHandler::SetWindow.
  3. W tym momencie procedura obsługi nie powinna wykonywać nic więcej, dopóki nie zostanie wywołana IPreviewHandler::DoPreview.
  4. Podgląd jest wyświetlany w okienku odczytu za pośrednictwem wywołania IPreviewHandler::DoPreview.
  5. Rozmiar okna jest ustawiany za pomocą IPreviewHandler::SetRect.
  6. Rozmiar okna jest zmieniany w razie potrzeby za pomocą IPreviewHandler::SetRect.
  7. Wersja zapoznawcza jest zwalniana i jej zasoby są zwalniane, gdy nie są już potrzebne, przez wywołanie metody IPreviewHandler::Unload.

Debugowanie elementu obsługującego podgląd

Jeśli wykonano zalecenia dotyczące implementowania programu obsługi w wersji zapoznawczej jako serwera przetwarzania, aby debugować procedurę obsługi w wersji zapoznawczej, możesz dołączyć do programu Prevhost.exe. Jak wspomniano wcześniej, należy pamiętać, że mogą istnieć dwa wystąpienia Prevhost.exe, jedno dla normalnych procesów IL na niskim poziomie i jedno dla tych obsługujących, które zrezygnowały z działania jako procesy IL niskiego poziomu.

Jeśli nie znajdziesz Prevhost.exe na liście dostępnych procesów, prawdopodobnie nie został załadowany w tym momencie. Kliknięcie pliku w celu podglądu spowoduje załadowanie zastępcy i powinno zostać wyświetlone jako proces możliwy do dołączenia.

Zapewnianie własnego procesu obsługi w wersji zapoznawczej

Jeśli chcesz wymusić utworzenie nowego procesu dla obsługującego zamiast uruchamiania w domyślnym procesie, utwórz nowy podklucz dla swojego obsługującego pod AppID i ustaw jego wpis DllSurrogate na "Prevhost.exe". Użyj tego podklucza AppID zamiast domyślnego Prevhost.exe AppID.

Dostarczając nowy proces, program obsługi może uniknąć uruchamiania się w ramach współużytkowanego procesu, co robiłby domyślnie. Może to umożliwić na przykład zapewnienie konkretnej wersji środowiska uruchomieniowego języka wspólnego (CLR) w procesie. Jest to wymagane, jeśli tworzysz zarządzaną implementację programu obsługi podglądu.

Notatka

Programy obsługi wersji zapoznawczej w wersji 32-bitowej powinny używać AppID {534A1E02-D58F-44f0-B58B-36CBED287C7C} gdy są instalowane na 64-bitowych systemach operacyjnych.

 

Kompilowanie procedur obsługi w wersji zapoznawczej

Jak zarejestrować program obsługi w wersji zapoznawczej

Wytyczne dotyczące programu obsługi podglądu