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 programu obsługi w wersji zapoznawczej
- opcje modelu serwera
- pl-PL: Inicjalizacja
- przepływ danych programu obsługi w wersji zapoznawczej
- Debugowanie programu do podglądu
- zapewnianie własnego procesu obsługi w wersji zapoznawczej
- Tematy pokrewne
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:
- IInitializeWithStream
- IObjectWithSite
- IOleWindow
- IPreviewHandler
- IPreviewHandlerVisuals (opcjonalnie)
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:
- 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.
- 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.
- Procedura obsługi w wersji zapoznawczej jest inicjowana, najlepiej ze strumieniem.
- Okno widoku jest przekazywane z hosta do programu obsługi za pośrednictwem IPreviewHandler::SetWindow.
- W tym momencie procedura obsługi nie powinna wykonywać nic więcej, dopóki nie zostanie wywołana IPreviewHandler::DoPreview.
- Podgląd jest wyświetlany w okienku odczytu za pośrednictwem wywołania IPreviewHandler::DoPreview.
- Rozmiar okna jest ustawiany za pomocą IPreviewHandler::SetRect.
- Rozmiar okna jest zmieniany w razie potrzeby za pomocą IPreviewHandler::SetRect.
- 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.
Tematy pokrewne