Przegląd Aplikacje przeglądarek WPF XAML

Aplikacje przeglądarki XAML (XBAPs) łączą funkcje zarówno aplikacji internetowych, jak i zaawansowanych aplikacji klienckich. Podobnie jak w przypadku aplikacji internetowych, XBAPs można wdrożyć na serwerze sieci Web i uruchomić z programu Internet Explorer lub Firefox w systemie Windows. Podobnie jak w przypadku zaawansowanych aplikacji klienckich, XBAPs mogą korzystać z możliwości platformy WPF. Opracowywanie rozwiązań XBAPs jest również podobne do tworzenia rozbudowanych rozwiązań klienckich. Ten temat zawiera proste, ogólne wprowadzenie do programowania XBAP i opisuje, gdzie programowanie XBAP różni się od standardowego zaawansowanego programowania klientów.

Ostrzeżenie

XBAPs wymagają obsługi starszych przeglądarek, takich jak Internet Explorer i Firefox. Te starsze wersje przeglądarki są zwykle nieobsługiwane w systemach Windows 10 i Windows 11. Nowoczesne przeglądarki nie obsługują już technologii wymaganej dla aplikacji XBAP ze względu na zagrożenia bezpieczeństwa. Wtyczki obsługujące XBAPs nie są już obsługiwane.

Ten temat zawiera następujące sekcje:

Tworzenie nowej aplikacji przeglądarki XAML (XBAP)

Najprostszym sposobem utworzenia nowego projektu XBAP jest program Visual Studio. Podczas tworzenia nowego projektu wybierz pozycję Aplikacja przeglądarki WPF z listy szablonów. Aby uzyskać więcej informacji, zobacz How to: Create a New WPF Browser Application Project (Jak utworzyć nowy projekt aplikacji przeglądarki WPF).

Po uruchomieniu projektu XBAP zostanie on otwarty w oknie przeglądarki zamiast w oknie autonomicznym. Podczas debugowania programu XBAP z poziomu programu Visual Studio aplikacja jest uruchamiana z uprawnieniem strefy internetowej i dlatego zgłasza wyjątki zabezpieczeń, jeśli te uprawnienia zostaną przekroczone. Aby uzyskać więcej informacji, zobacz Zabezpieczenia i zabezpieczenia częściowego zaufania WPF.

Uwaga

Jeśli nie tworzysz aplikacji za pomocą programu Visual Studio lub chcesz dowiedzieć się więcej o plikach projektu, zobacz Tworzenie aplikacji WPF.

Wdrażanie XBAP

Podczas tworzenia XBAP dane wyjściowe zawierają następujące trzy pliki:

Plik opis
Plik wykonywalny (.exe) Zawiera on skompilowany kod i ma rozszerzenie .exe.
Manifest aplikacji (manifest) Zawiera metadane skojarzone z aplikacją i ma rozszerzenie manifestu.
Manifest wdrożenia (xbap) Ten plik zawiera informacje używane przez aplikację ClickOnce do wdrożenia aplikacji i ma rozszerzenie xbap.

Należy wdrożyć XBAPs na serwerze sieci Web, na przykład microsoft Internet Information Services (IIS) 5.0 lub nowsze wersje. Nie musisz instalować programu .NET Framework na serwerze sieci Web, ale musisz zarejestrować typy WPF Multipurpose Internet Mail Extensions (MIME) i rozszerzenia nazw plików. Aby uzyskać więcej informacji, zobacz Configure IIS 5.0 and IIS 6.0 to Deploy WPF Applications (Konfigurowanie usług IIS 5.0 i IIS 6.0 w celu wdrażania aplikacji WPF).

Aby przygotować środowisko XBAP do wdrożenia, skopiuj .exe i skojarzone manifesty na serwer sieci Web. Utwórz stronę HTML zawierającą hiperlink, aby otworzyć manifest wdrożenia, który jest plikiem z rozszerzeniem xbap. Gdy użytkownik kliknie link do pliku xbap, clickOnce automatycznie obsługuje mechanikę pobierania i uruchamiania aplikacji. Poniższy przykładowy kod przedstawia stronę HTML zawierającą hiperlink wskazujący XBAP.

<html>
    <head></head>
    <body>
        <a href="XbapEx.xbap">Click this link to launch the application</a>
    </body>
</html>

Możesz również hostować XBAP w ramce strony sieci Web. Utwórz stronę sieci Web z co najmniej jedną ramką. Ustaw właściwość źródłową ramki na plik manifestu wdrożenia. Jeśli chcesz użyć wbudowanego mechanizmu do komunikacji między hostowaniem strony internetowej i XBAP, musisz hostować aplikację w ramce. Poniższy przykładowy kod przedstawia stronę HTML z dwiema ramkami. Źródło drugiej ramki jest ustawione na XBAP.

<html>
    <head>
        <title>A page with frames</title>
    </head>
    <frameset cols="50%,50%">
        <frame src="introduction.htm">
        <frame src="XbapEx.xbap">
    </frameset>
</html>

Czyszczenie buforowanych adresów XBAPs

W niektórych sytuacjach po odbudowaniu i uruchomieniu XBAP może się okazać, że jest otwarta wcześniejsza wersja XBAP. Na przykład to zachowanie może wystąpić, gdy numer wersji zestawu XBAP jest statyczny i uruchamiasz XBAP z wiersza polecenia. W takim przypadku, ponieważ numer wersji między wersją pamięci podręcznej (wersja, która została wcześniej uruchomiona) i nowa wersja pozostaje taka sama, nowa wersja programu XBAP nie jest pobierana. Zamiast tego ładowana jest buforowana wersja.

W takich sytuacjach można usunąć buforowaną wersję przy użyciu polecenia Mage (zainstalowanego z programem Visual Studio lub zestawu Windows SDK) w wierszu polecenia. Następujące polecenie czyści pamięć podręczną aplikacji.

Mage.exe -cc

To polecenie gwarantuje, że uruchomiono najnowszą wersję środowiska XBAP. Podczas debugowania aplikacji w programie Visual Studio należy uruchomić najnowszą wersję środowiska XBAP. Ogólnie rzecz biorąc, należy zaktualizować numer wersji wdrożenia przy użyciu każdej kompilacji. Aby uzyskać więcej informacji na temat narzędzia Mage, zobacz Mage.exe (Narzędzie tworzenia i edycji manifestów).

Komunikacja ze stroną internetową hosta

Gdy aplikacja jest hostowana w ramce HTML, możesz komunikować się ze stroną internetową zawierającą XBAP. W tym celu należy pobrać HostScript właściwość .BrowserInteropHelper Ta właściwość zwraca obiekt skryptu reprezentujący okno HTML. Następnie można uzyskać dostęp do właściwości, metod i zdarzeń w obiekcie okna przy użyciu standardowej składni kropki. Możesz również uzyskać dostęp do metod skryptów i zmiennych globalnych. W poniższym przykładzie pokazano, jak pobrać obiekt skryptu i zamknąć przeglądarkę.

private void Button_Click(object sender, RoutedEventArgs e)
{
    // Retrieve the script object. The XBAP must be hosted in a frame or
    // the HostScript object will be null.
    var scriptObject = BrowserInteropHelper.HostScript;

    // Call close to close the browser window.
    scriptObject.Close();
}
Private Sub Button_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
    ' Retrieve the script object  The XBAP must be hosted in a frame or
    ' the HostScript object will be null.
    Dim scriptObject = BrowserInteropHelper.HostScript

    ' Call close to close the browser window.
    scriptObject.Close()
End Sub

Debugowanie XBAPs korzystających z języka HostScript

Jeśli XBAP używa HostScript obiektu do komunikowania się z oknem HTML, istnieją dwa ustawienia, które należy określić, aby uruchomić i debugować aplikację w programie Visual Studio. Aplikacja musi mieć dostęp do swojej witryny pochodzenia i należy uruchomić aplikację ze stroną HTML zawierającą XBAP. W poniższych krokach opisano sposób sprawdzania tych dwóch ustawień:

  1. W programie Visual Studio otwórz właściwości projektu.

  2. Na zabezpieczeń kliknij pozycję Zaawansowane.

    Zostanie wyświetlone okno dialogowe Zaawansowane ustawienia zabezpieczeń.

  3. Upewnij się, że pole wyboru Udziel aplikacji dostępu do jej witryny źródła jest zaznaczone, a następnie kliknij przycisk OK.

  4. Na karcie Debugowanie wybierz opcję Uruchom przeglądarkę z adresem URL i określ adres URL strony HTML zawierającej XBAP.

  5. W programie Internet Explorer kliknij przycisk Narzędzia , a następnie wybierz pozycję Opcje internetowe.

    Zostanie wyświetlone okno dialogowe Opcje internetowe.

  6. Kliknij kartę Zaawansowane.

  7. Na liście Ustawienia w obszarze Zabezpieczenia zaznacz pole wyboru Zezwalaj na uruchamianie aktywnej zawartości w plikach na moim komputerze.

  8. Kliknij przycisk OK.

    Zmiany zostaną zastosowane po ponownym uruchomieniu programu Internet Explorer.

Uwaga

Włączenie aktywnej zawartości w programie Internet Explorer może narażać komputer na ryzyko. Jeśli nie chcesz zmieniać ustawień zabezpieczeń programu Internet Explorer, możesz uruchomić stronę HTML z serwera i dołączyć debuger programu Visual Studio do procesu.

Zagadnienia dotyczące zabezpieczeń XBAP

XBAPs zazwyczaj są wykonywane w piaskownicy zabezpieczeń częściowego zaufania, która jest ograniczona do zestawu uprawnień strefy internetowej. W związku z tym implementacja musi obsługiwać podzestaw elementów WPF obsługiwanych w strefie internetowej lub należy podnieść poziom uprawnień aplikacji. Aby uzyskać więcej informacji, zobacz Zabezpieczenia.

Jeśli używasz WebBrowser kontrolki w aplikacji, WPF wewnętrznie tworzy wystąpienie natywnej kontrolki ActiveX WebBrowser. Gdy aplikacja jest elementem XBAP częściowo zaufanym uruchomionym w programie Internet Explorer, kontrolka ActiveX jest uruchamiana w dedykowanym wątku procesu programu Internet Explorer. W związku z tym obowiązują następujące ograniczenia:

  • Kontrolka WebBrowser powinna zapewniać zachowanie podobne do przeglądarki hosta, w tym ograniczenia zabezpieczeń. Niektóre z tych ograniczeń zabezpieczeń można kontrolować za pomocą ustawień zabezpieczeń programu Internet Explorer. Aby uzyskać więcej informacji, zobacz Zabezpieczenia.

  • Wyjątek jest zgłaszany, gdy element XBAP jest ładowany między domenami na stronie HTML.

  • Dane wejściowe są w osobnym wątku niż WPF WebBrowser, więc nie można przechwycić danych wejściowych klawiatury, a stan IME nie jest udostępniany.

  • Chronometraż lub kolejność nawigacji może być inna ze względu na kontrolkę ActiveX uruchomioną w innym wątku. Na przykład przejście do strony nie zawsze jest anulowane przez uruchomienie innego żądania nawigacji.

  • Niestandardowa kontrolka ActiveX może mieć problemy z komunikacją, ponieważ aplikacja WPF jest uruchomiona w osobnym wątku.

  • MessageHook nie jest zgłaszana, ponieważ HwndHost nie można podklasy okna uruchomionego w innym wątku lub procesie.

Tworzenie XBAP o pełnym zaufaniu

Jeśli XBAP wymaga pełnego zaufania, możesz zmienić projekt, aby włączyć to uprawnienie. W poniższych krokach opisano sposób włączania pełnego zaufania:

  1. W programie Visual Studio otwórz właściwości projektu.

  2. Na karcie Zabezpieczenia wybierz opcję To jest pełna aplikacja zaufania.

To ustawienie wprowadza następujące zmiany:

  • W pliku projektu wartość elementu zostanie zmieniona <TargetZone> na Custom.

  • W manifeście aplikacji (app.manifest) Unrestricted="true" atrybut jest dodawany do elementu "PermissionSet .

    <PermissionSet class="System.Security.PermissionSet"
                   version="1"
                   ID="Custom"
                   SameSite="site"
                   Unrestricted="true" />
    

Wdrażanie XBAP o pełnym zaufaniu

Podczas wdrażania pełnego zaufania XBAP, który nie jest przestrzegany modelu zaufanego wdrażania ClickOnce, zachowanie, gdy użytkownik uruchamia aplikację, będzie zależeć od strefy zabezpieczeń. W niektórych przypadkach użytkownik otrzyma ostrzeżenie podczas próby jego zainstalowania. Użytkownik może kontynuować lub anulować instalację. W poniższej tabeli opisano zachowanie aplikacji dla każdej strefy zabezpieczeń oraz czynności, które należy wykonać, aby aplikacja otrzymała pełne zaufanie.

Strefa zabezpieczeń Zachowanie Uzyskiwanie pełnego zaufania
Komputer lokalny Automatyczne pełne zaufanie Nie trzeba wykonywać żadnych czynności.
Intranet i zaufane witryny Monituj o pełne zaufanie Podpisz plik XBAP przy użyciu certyfikatu, aby użytkownik widział źródło w wierszu polecenia.
Internet Kończy się niepowodzeniem z komunikatem "Zaufanie nie udzielono" Podpisz XBAP przy użyciu certyfikatu.

Uwaga

Zachowanie opisane w poprzedniej tabeli dotyczy pełnych zaufania XBAPs, które nie są zgodne z modelem zaufanego wdrażania ClickOnce.

Zaleca się użycie modelu zaufanego wdrażania ClickOnce do wdrażania pełnego zaufania XBAP. Ten model umożliwia automatyczne przyznanie pełnej zaufania XBAP niezależnie od strefy zabezpieczeń, dzięki czemu użytkownik nie jest monitowany. W ramach tego modelu należy podpisać aplikację przy użyciu certyfikatu zaufanego wydawcy. Aby uzyskać więcej informacji, zobacz Omówienie zaufanego wdrażania aplikacji i wprowadzenie do podpisywania kodu.

Zagadnienia dotyczące wydajności czasu rozpoczęcia XBAP

Ważnym aspektem wydajności XBAP jest czas rozpoczęcia. Jeśli aplikacja XBAP jest pierwszą aplikacją WPF do załadowania, zimny czas rozpoczęcia może wynosić dziesięć sekund lub więcej. Wynika to z faktu, że strona postępu jest renderowana przez WPF, a zarówno CLR, jak i WPF muszą być uruchomione na zimno, aby wyświetlić aplikację.

Począwszy od programu .NET Framework 3.5 SP1, czas zimnego uruchamiania XBAP jest ograniczany przez wyświetlenie strony postępu niezarządzanego na początku cyklu wdrażania. Strona postępu jest wyświetlana niemal natychmiast po uruchomieniu aplikacji, ponieważ jest wyświetlana przez natywny kod hostingu i renderowana w kodzie HTML.

Ponadto ulepszona współbieżność sekwencji pobierania ClickOnce poprawia czas rozpoczęcia o maksymalnie dziesięć procent. Po pobraniu i zweryfikowaniu manifestów funkcja ClickOnce rozpocznie pobieranie aplikacji, a pasek postępu zacznie aktualizować.

Zobacz też