Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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