Obsługa działania poza przeglądarką, cz. I

Aplikacje oparte na programie Silverlight można skonfigurować w sposób umożliwiający użytkownikom instalowanie ich ze stron internetowych, w których są udostępniane, a następnie uruchamianie ich poza przeglądarką.

Konfiguracja wymaga jedynie podania dodatkowych informacji o aplikacji. Informacje te są używane przez program Silverlight do wyświetlenia interfejsu instalacyjnego, skrótów umożliwiających uruchomienie aplikacji i okna aplikacji działającego poza przeglądarką. Informacje te są przekazywane za pośrednictwem manifestu aplikacji, co oznacza, że można włączyć obsługę działania poza przeglądarką bez potrzeby ponownego kompilowania.

Jeśli aplikacja jest prawidłowo skonfigurowana, program Silverlight wyświetla opcję instalacji po kliknięciu prawym przyciskiem myszy. Można również określić własny interfejs instalacyjny, uzupełniający lub zastępujący opcję dostępną po kliknięciu prawym przyciskiem myszy.

Aplikacja działająca poza przeglądarką nie wymaga połączenia sieciowego. Jeśli jednak aplikacja zazwyczaj używa zasobów sieciowych, można wdrożyć wykrywanie sieci i zapewnić obsługę trybu offline w sytuacji, gdy połączenie jest niedostępne. Można np. używać izolowanej pamięci masowej jako bufora trybu offline, który można synchronizować z danymi serwerowymi po wznowieniu połączenia. Kiedy połączenie jest dostępne można również sprawdzać, czy nie pojawiły się aktualizacje aplikacji.

Można skonfigurować aplikację działające poza przeglądarką tak, aby wymagała przyznania podniesionych uprawnień. Zaufane aplikacje mogą ominąć część ograniczeń związanych z izolowanym środowiskiem. Aplikacje zaufane mogą np. używać trybu pełnoekranowego bez ograniczeń klawiaturowych.

Uwaga:
Aplikacje działające poza przeglądarką są objęte takimi samymi ograniczeniami związanymi z izolowanym środowiskiem, jak zwykłe aplikacje działające w przeglądarce. Można rozluźnić część z tych ograniczeń, konfigurując aplikację w taki sposób, aby wymagała podniesionego poziomu uprawnień. Jeśli jednak wymagany jest nieograniczony dostęp do komputera użytkownika lub dodatkowa funkcjonalność niedostępna w programie Silverlight, doradzamy zastosowanie rozwiązania Windows Presentation Foundation (WPF). Ewentualnie można użyć innej aplikacji jako hosta dodatku plug-in Silverlight. Więcej informacji można uzyskać w dokumencie Alternatywne rozwiązania hostingu (j.ang.)

Aplikacje działające poza przeglądarką mogą uzyskiwać dostęp do zasobów sieciowych przy użyciu protokołu HTTPS, kiedy dostępne jest połączenie. Obecnie jednak nie ma wbudowanego wskaźnika obecności bezpiecznego kanału, a każdy użyty wskaźnik może zostać sfałszowany. Aplikacje działającą poza przeglądarką nie są bardziej bezpieczne od swoich witryn-hostów. Dlatego też użytkownicy powinni kierować się bezpieczeństwem witryny-hosta podczas instalowania lub aktualizowania aplikacji działających poza przeglądarką. Jeśli aplikacja wykorzystuje poufne informacje, należy używać protokołu HTTPS w identyfikatorze URI aplikacji w celu zapewnienia bezpieczeństwa komunikacji. Należy zwrócić uwagę, że kiedy aplikacja sprawdza dostępność aktualizacji zawsze jest używany identyfikator URI oryginalnej aplikacji (łącznie z protokołem).

Instalowanie, uruchamianie i odinstalowywanie aplikacji działającej poza przeglądarką

Aby zainstalować poprawnie skonfigurowaną aplikację programu Silverlight, należy kliknąć ją prawym przyciskiem myszy na stronie będącej hostem i wybrać polecenie Install <nazwa aplikacji> onto this computer (zainstaluj na tym komputerze). Powoduje to wyświetlenie widocznego poniżej okna dialogowego, które umożliwia użytkownikowi określenie lokalizacji skrótów do aplikacji.

Jeśli aplikacja zostanie skonfigurowana tak, aby wymagać podniesionych uprawnień, zamiast tego okna zostanie wyświetlone okno dialogowe z ostrzeżeniem o bezpieczeństwie. Zawiera ono takie same opcje skrótów, ale dodatkowo ostrzega użytkownika, że aplikacja będzie miała pełniejszy dostęp do komputera.

Nazwa aplikacji w menu wyświetlanym po kliknięciu prawym przyciskiem myszy i w oknie dialogowym odpowiada nazwie skrótu w konfiguracji działania poza przeglądarką. Obraz w oknie dialogowym odpowiada największej ikonie określonej w konfiguracji. Jeśli w konfiguracji nie zostaną określone żadne ikony, zostanie użyta ikona domyślna, widoczna w przykładowym obrazie.

Można wyświetlić okno dialogowe w sposób programistyczny, wywołując metodę Application..::.Install (j.ang.). Jednak działa to jedynie w module obsługi zdarzeń zainicjowanych przez użytkownika oraz pod warunkiem prawidłowego skonfigurowania aplikacji.

Uwaga:
Administratorzy systemu mogą wyłączyć możliwość instalowania zaufanych aplikacji. W takim wypadku próba instalacji nie przynosi skutku, a metoda Install (j.ang.) zwraca wartość false.

W razie obsługi zdarzenia MouseRightButtonDown (j.ang.) menu aplikacji wyświetlane po kliknięciu prawym przyciskiem myszy jest automatycznie pomijane. W takim wypadku należy udostępnić własny interfejs instalacyjny działania poza przeglądarką. Jeśli zdarzenie MouseRightButtonDown (j.ang.) nie jest obsługiwane, a mimo to chcemy pominąć opcję instalacji dostępną po kliknięciu prawym przyciskiem myszy, należy ustawić wartość właściwości OutOfBrowserSettings..::.ShowInstallMenuItem (j.ang.) na false w konfiguracji działania poza przeglądarką.

Instalacja działania poza przeglądarką wymaga zgody użytkownika, tak więc nie można wyłączyć okna dialogowego instalacji. Można jednak uzyskać dostęp do danych konfiguracji przy użyciu właściwości Deployment..::.OutOfBrowserSettings (j.ang) w celu wyświetlenia własnego interfejsu użytkownika.

Instalacja działania poza przeglądarką nie wymaga uprawnień administracyjnych. Zainstalowanie aplikacji przez uzytkownika powoduje umieszczenie kopii w buforze aplikacji działających poza przeglądarką, znajdującym się w folderze profilu użytkownika. Oznacza to, że aplikacja jest dostępna wyłącznie dla użytkownika, który ją zainstalował.

Użytkownik może uruchomić aplikację przy użyciu skrótów określonych w oknie dialogowym instalacji. Skróty uruchamiają program o nazwie sllauncher.exe, przekazując do niego niepowtarzalny identyfikator powiązany z aplikacją działającą poza przeglądarką. Program sllauncher wczytuje aplikację do okna o szerokości, wysokości i tekście paska tytułu określonych w konfiguracji działania poza przeglądarką.

Aby usunąć zainstalowaną aplikację, należy ją uruchomić, kliknąć prawym przyciskiem myszy i wybrać polecenie Remove this application (usuń tę aplikację). Użytkownik może również odinstalować aplikację, używając okna Programy i funkcje, dostępnego w Panelu sterowania. Jest to konieczne, jeśli obsługa zdarzenia MouseRightButtonDown (j.ang.) powoduje pominięcie menu wyświetlanego po kliknięciu prawym przyciskiem myszy.

Administratorzy systemu mogą użyć wersji programu sllauncher.exe  dostępnej w programie Silverlight 4 RC do automatyzacji instalacji działania poza przeglądarką. Więcej informacji można uzyskać w dokumencie Przewodnik wdrażania programu Silverlight (j.ang.).

Wykrywanie połączenia sieciowego i stanu działania poza przeglądarką

Wiele aplikacji opartych na programie Silverlight korzysta z usług sieciowych lub udostępnianych przez przeglądarkę i nie będzie działać poprawnie poza przeglądarką. Tak więc np. funkcja Deep Zoom nie działa bez połączenia internetowego, a funkcja HTML Bridge nie działa bez strony internetowej będącej hostem.

Aby zmniejszyć wpływ tego ograniczenia, można zmodyfikować kod aplikacji w taki sposób, aby wykrywane było połączenie sieciowe i działanie poza przeglądarką. W zależności od efektu wykrywania używany będzie inny kod. Można np. zastąpić kod HTML pochodzący z przeglądarki kodem HTML renderowanym w formancie WebBrowser (j.ang.).

Stan połączenia sieciowego można sprawdzić, wywołując metodę NetworkInterface..::.GetIsNetworkAvailable (j.ang.).

Reakcję na zmiany w dostępności połączenia może zapewnić obsługa zdarzenia NetworkChange..::.NetworkAddressChanged (j.ang.).

Można określić, czy aplikacja została zainstalowana do użycia poza przeglądarką, sprawdzając wartość właściwości Application..::.InstallState (j.ang.). Reakcję na zmiany w stanie instalacji do użycia poza przeglądarką może zapewnić obsługa zdarzenia Application..::.InstallStateChanged (j.ang.). Można określić też, czy aplikacja została uruchomiona spoza przeglądarki, sprawdzając wartość właściwości Application..::.IsRunningOutOfBrowser (j.ang.).

Zazwyczaj należy wyłączyć wszelką funkcjonalność aplikacji zależną od usług sieciowych lub udostępnianych w przeglądarce. Jeśli w czasie, kiedy dostępne jest połączenie, aplikacja przechowuje informacje o stanie użytkownika na serwerze-hoście, można używać izolowanej pamięci masowej do buforowania danych pomiędzy uruchomieniami aplikacji. Następnie można reagować na dostępność sieci, synchronizując buforowane dane z serwerem. Więcej informacji można uzyskać w dokumencie Izolowana pamięć masowa (j.ang.). Alternatywnym rozwiązaniem jest skonfigurowanie aplikacji w taki sposób, aby wymagała podniesionych uprawnień. Umożliwia to aplikacji przechowywanie informacji o stanie użytkownika i innych danych w lokalnym systemie plików.

Można używać lokalnego przekazywania wiadomości w celu zapewnienia komunikacji między aplikacją działającą poza przeglądarką a aplikacją działającą w hostingu na stronie internetowej. Jednak w przeglądarce Internet Explorer lokalne przekazywanie wiadomości między aplikacjami znajdującymi się w różnych strefach zabezpieczeń jest domyślnie wyłączone. Aplikacje udostępniane w hostingu na stronach internetowych zazwyczaj działają w strofie Internet, natomiast aplikacje uruchamiane poza przeglądarką działają w strefie Zaufane. Tak więc w celu włączenia lokalnego przekazywania wiadomości w takim scenariuszu należy ustawić wartość właściwości LocalMessageReceiver..::.DisableSenderTrustCheck (j.ang.) na true. Więcej informacji można uzyskać w dokumencie Komunikacja między lokalnymi aplikacjami programu Silverlight (j.ang.).

Specjalne funkcje aplikacji działających poza przeglądarką

Aplikacje programu Silverlight 4 RC działające poza przeglądarką mogą korzystać z następujących funkcji niedostępnych dla aplikacji udostępnianych w hostingu w przeglądarce:

  • Manipulowanie oknem. W dowolnym momencie można zmodyfikować okno aplikacji działającej poza przeglądarką. Można np. w sposób programistyczny zmienić jego wielkość, wyświetlić je jako okno znajdujące się na wierzchu pulpitu lub zminimalizować je albo zmaksymalizować. Można też obsługiwać zdarzenie Window..::.Closing (j.ang.), które można anulować poza sytuacją zamykania komputera lub wylogowywania użytkownika. Zdarzenie Closing (j.ang.) umożliwia wykonywanie takich działań, jak wyświetlenie ostrzeżenia w wypadku, gdy użytkownik ma niezapisane zmiany w danych aplikacji. Więcej informacji można uzyskać w dokumencie Window (j.ang).
  • Dostosowywanie okna. Aplikacje zaufane mogą ukrywać pasek tytułu i obramowanie okna aplikacji działającej poza przeglądarką, co pozwala na pełne dostosowanie interfejsu użytkownika. Klasa Window (j.ang.) udostępnia interfejsy API, mogące zastępować przyciski paska tytułu w aplikacji i umożliwiające przenoszenie lub zmienianie wielkości okna za pomocą przeciągania myszą.
  • Hosting kodu HTML. W aplikacji działającej poza przeglądarką można wyświetlać zawartość HTML w celu zastąpienia funkcjonalności udostępnianej przez stronę internetową będącą hostem. Można np. wyświetlać reklamy w kodzie HTML, które zazwyczaj byłyby wyświetlane obok aplikacji programu Silverlight na stronie internetowej. Więcej informacji można uzyskać w dokumentacji klasy WebBrowser (j.ang.).
  • Okna powiadomień. Aplikacje działające poza przeglądarką mogą wyświetlać tymczasowe okna powiadomień podobne do okien programu Outlook informujących o przychodzących wiadomościach e-mail. Okna powiadomień umożliwiają ograniczoną interakcję z użytkownikiem. Mogą np. reagować na kliknięcia użytkownika w celu aktywowania głównego okna aplikacji działającej poza przeglądarką. Więcej informacji można uzyskać w dokumentacji klasy NotificationWindow (j.ang.).
  • Obsługa zarządzania prawami cyfrowymi do plików multimedialnych w trybie offline. Więcej informacji można uzyskać w dokumencie Zarządzanie prawami cyfrowymi (j.ang.).
  • Podniesione uprawnienia. Zaufane aplikacje mogą integrować się z funkcjonalnością macierzystą i nie są objęte takimi ograniczeniami bezpieczeństwa jak normalne aplikacje programu Silverlight. Zaufane aplikacje np. nie ograniczają międzydomenowych żądań sieci Web.
  • Dostęp do systemu plików. Zaufane aplikacje mogą uzyskać dostęp do typu System.IO (j.ang.) i typów pokrewnych, które są niedostępne w inny sposób dla programu Silverlight. Te interfejsy API zapewniają bezpośredni dostęp umożliwiający odczytywanie i zapisywanie plików w folderach użytkownika na lokalnym komputerze.

Sprawdzanie dostępności aktualizacji aplikacji

Jeśli aplikacja została uruchomiona poza przeglądarką i dostępne jest połączenie sieciowe, można sprawdzić, czy na serwerze-hoście nie są dostępne aktualizacje aplikacji.

Uwaga:
Zgodnie z ogólną zasadą sprawdzanie aktualizacji należy przeprowadzać tylko za zgodą użytkownika oraz powiadamiać użytkownika o dostępności aktualizacji.

Aby sprawdzić dostępność aktualizacji i ją pobrać, należy wywołać metodę CheckAndDownloadUpdateAsync (j.ang.) w wątku interfejsu użytkownika i obsłużyć zdarzenie Application..::.CheckAndDownloadUpdateCompleted (j.ang.). W module obsługi zdarzeń właściwość UpdateAvailable (j.ang.) ma wartość true, jeśli została odnaleziona i pobrana nowa wersja aplikacji. W takim wypadku można powiadomić użytkownika o konieczności ponownego uruchomienia w celu wczytania aktualizacji.

Jeśli dostępna jest aktualizacja aplikacji, wymagająca jednak nowej wersji programu Silverlight, której użytkownik jeszcze nie zainstalował, aktualizacja nie zostanie pobrana. Dzieje się tak również, jeśli aktualizacja wprowadza wymóg posiadania przez aplikację podniesionych uprawnień. W obu wypadkach właściwość UpdateAvailable (j.ang.) ma wartość false, a wartością właściwości Error (j.ang.) jest Exception (j.ang.). W przypadku zmiany wersji programu Silverlight, wyjątek ma wartość PlatformNotSupportedException (j.ang.). W przypadku zmiany związanej z bezpieczeństwem, wyjątek ma wartość SecurityException (j.ang.). W takim wypadku można wyświetlić użytkownikowi alert z instrukcją otworzenia strony internetowej będącej hostem aplikacji, co spowoduje uruchomienie opartego o HTML interfejsu uaktualnienia programu Silverlight.

Program Silverlight 4 RC zapewnia też obsługę aplikacji działających poza przeglądarką z podniesionymi uprawnieniami. Zaufane aplikacje nie mogą używać mechanizmu aktualizacji opisanego w niniejszej sekcji, o ile zarówno aplikacja, jak i aktualizacja nie jest podpisana tym samym poprawnym certyfikatem podpisywania kodu. Aby zaktualizować zaufaną aplikację bez ważnego podpisu, użytkownik musi ręcznie odinstalować starą wersję i zainstalować nową.

Debugowanie aplikacji działających poza przeglądarką

Programy Visual Studio 2010 RC i Silverlight 4 RC udostępniają dodatkową obsługę debugowania aplikacji działających poza przeglądarką.

W programie Visual Studio na stronie Debug projektanta można ustawić pozycję Installed out-of-browser application (zainstalowana aplikacja działająca poza przeglądarką) jako Start Action (działanie startowe). Następnie po rozpoczęciu debugowania program Visual Studio uruchomi aplikację działającą poza przeglądarką i automatycznie dołączy do niej debugera. Aby uzywać tej funkcji, należy najpierw uruchomić i zainstalować aplikację z przeglądarki. Jeśli w rozwiązaniu znajduje się projekt sieci Web, należy dodatkowo ustawić projekt programu Silverlight jako projekt startowy.

Program Silverlight 4 RC zapewnia jedynie obsługę debugowania w systemie Windows tylko w wierszu poleceń. Można użyć programu sllauncher.exe w celu uruchomienia pliku XAP w oknie poza przeglądarką w taki sposób, jakby został on zainstalowany. Następnie można dołączyć debugera do procesu okna poza przeglądarką.

Aby uruchomić plik XAP w oknie poza przeglądarką, należy użyć następującego wiersza polecenia:

sllauncher /emulate:nazwa_pliku_xap /origin:uri

Parametr origin wskazuje identyfikator URI witryny pochodzenia aplikacji. Jest to wymagane w celu przypisania uprawnień związanych z zabezpieczeniami, np. dostępu do izolowanej pamięci masowej. W ten sposób udostępniany jest też bazowy identyfikator URI, który może posłużyć aplikacji do rozpoznawania względnych identyfikatorów URI, uzyskiwania dostępu do zasobów zdalnych i aktualizowania aplikacji.

Program sllauncher.exe można znaleźć w jednej z następujących lokalizacji:

  • W 32-bitowych systemach operacyjnych: C:\Program Files\Microsoft Silverlight
  • W 64-bitowych systemach operacyjnych: C:\Program Files (x86)\Microsoft Silverlight