Omówienie aplikacji przeglądarki 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 stare wersje przeglądarki Firefox. Te starsze 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. Aby uzyskać więcej informacji, zobacz często zadawane pytania dotyczące aplikacji hostowanych w przeglądarce WPF (XBAP).
Ten temat zawiera następujące sekcje:
Wdrażanie XBAP
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 Security i WPF Partial Trust Security.
Notatka
Jeśli nie tworzysz aplikacji w programie Visual Studio lub chcesz dowiedzieć się więcej o plikach projektu, zobacz Building a WPF Application.
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 | Zawiera metadane skojarzone z aplikacją i ma rozszerzenie .manifest. |
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 Konfigurowanie IIS 5.0 i IIS 6.0 do 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 wersji przechowywanej w pamięci podręcznej (wersja, która została wcześniej uruchomiona) i nowej wersji pozostaje bez zmian, 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 za pomocą programu 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 dla każdej kompilacji. Aby uzyskać więcej informacji na temat narzędzia Mage, zobacz Mage.exe (Narzędzie generowania manifestu i edytowania).
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ć właściwość HostScript z 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 obiekt XBAP używa obiektu HostScript 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ń:
W programie Visual Studio otwórz właściwości projektu.
Na karcie zabezpieczeń kliknij pozycję Advanced.
Zostanie wyświetlone okno dialogowe Ustawienia zabezpieczeń zaawansowanych.
Upewnij się, że pole wyboru Udziel aplikacji dostępu do jej witryny źródła jest zaznaczone, a następnie kliknij przycisk OK.
Na karcie debugowania
wybierz opcję Uruchom przeglądarkę z adresem URL i określ adres URL strony HTML zawierającej XBAP.W programie Internet Explorer kliknij przycisk narzędzia , a następnie wybierz pozycję Opcje internetowe.
Zostanie wyświetlone okno dialogowe Opcje internetowe.
Kliknij kartę Zaawansowane.
Na liście Ustawienia w obszarze Zabezpieczeniazaznacz pole wyboru Zezwalaj na uruchamianie aktywnej zawartości w plikach na moim komputerze.
Kliknij przycisk OK.
Zmiany zostaną zastosowane po ponownym uruchomieniu programu Internet Explorer.
Ostrożność
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ą uruchamiane w środowisku piaskownicy zabezpieczeń ograniczonego zaufania, które jest ograniczone 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 Security.
Gdy używasz kontrolki oznaczonej jako WebBrowser w swojej aplikacji, WPF wewnętrznie instancjonuje natywną kontrolkę ActiveX WebBrowser. Gdy aplikacja XBAP uruchamiana w trybie częściowego zaufania działa w programie Internet Explorer, kontrolka ActiveX działa 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 hostów, 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 Security.
Wyjątek jest zgłaszany, gdy element XBAP jest ładowany między domenami na stronie HTML.
Wątek danych wejściowych jest oddzielny od WPF WebBrowser, dlatego nie można przechwycić danych wejściowych z klawiatury i stan IME nie jest współdzielony.
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 podnoszona, ponieważ HwndHost nie może podklasować okna, które działa w innym wątku lub procesie.
Tworzenie XBAP Full-Trust
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:
W programie Visual Studio otwórz właściwości projektu.
Na karcie Security wybierz opcję To jest aplikacja z pełnym zaufaniem.
To ustawienie wprowadza następujące zmiany:
W pliku projektu wartość elementu
<TargetZone>
zostanie zmieniona naCustom
.W manifeście aplikacji (app.manifest) atrybut
Unrestricted="true"
jest dodawany do elementu "PermissionSet.<PermissionSet class="System.Security.PermissionSet" version="1" ID="Custom" SameSite="site" Unrestricted="true" />
Wdrażanie Full-Trust XBAP
Podczas wdrażania aplikacji z pełnym zaufaniem XBAP, który nie stosuje się do modelu zaufanego wdrożenia ClickOnce, zachowanie aplikacji, gdy użytkownik ją uruchamia, 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 jest wymagana żadna akcja. |
Intranet i zaufane witryny | Monit 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. |
Notatka
Zachowanie opisane w poprzedniej tabeli dotyczy pełnego zaufania XBAP, które nie stosują się do modelu zaufanego wdrażania ClickOnce.
Zaleca się użycie modelu zaufanego wdrażania ClickOnce w celu wdrożenia XBAP z pełnym zaufaniem. Model umożliwia automatyczne przyznanie XBAP pełnego zaufania, niezależnie od strefy zabezpieczeń, dzięki czemu użytkownik nie jest proszony o potwierdzenie. W ramach tego modelu należy podpisać aplikację przy użyciu certyfikatu zaufanego wydawcy. Aby uzyskać więcej informacji, zobacz Omówienie wdrażania zaufanych aplikacji oraz Wprowadzenie do podpisywania kodu.
Uwagi dotyczące wydajności czasu uruchamiania XBAP
Ważnym aspektem wydajności XBAP jest czas rozpoczęcia. Jeśli aplikacja XBAP jest pierwszym, które się ładuje w środowisku WPF, czas zimnego startu 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ę.
Od wersji .NET Framework 3.5 SP1, czas początkowego uruchomienia XBAP jest ograniczany przez wyświetlenie niezarządzanej strony postępu na początku procesu 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 zwiększona współbieżność sekwencji pobierania ClickOnce zmniejsza czas uruchamiania o maksymalnie dziesięć procent. Po pobraniu i zweryfikowaniu manifestów, ClickOnce rozpoczyna pobieranie aplikacji i pasek postępu zaczyna się aktualizować.
Zobacz też
.NET Desktop feedback