Freigeben über


Übersicht über WPF-XAML-Browseranwendungen

XAML-Browseranwendungen (XBAPs) kombinieren Features von Webanwendungen und Rich-Client-Anwendungen. Wie Webanwendungen können XBAPs auf einem Webserver bereitgestellt und von Internet Explorer oder Firefox unter Windows gestartet werden. Wie bei den Rich-Client-Anwendungen können XBAPs die Funktionen von WPF nutzen. Die Entwicklung von XBAPs ähnelt auch der Rich-Client-Entwicklung. Dieses Thema enthält eine einfache, allgemeine Einführung in die XBAP-Entwicklung und beschreibt, wo sich die XBAP-Entwicklung von der standardmäßigen Rich-Client-Entwicklung unterscheidet.

Warnung

XBAPs erfordern, dass ältere Browser funktionieren, z. B. Internet Explorer und alte Versionen von Firefox. Diese älteren Browser werden in der Regel unter Windows 10 und Windows 11 nicht unterstützt. Moderne Browser unterstützen die für XBAP-Apps erforderliche Technologie aufgrund von Sicherheitsrisiken nicht mehr. Plug-Ins, die XBAPs aktivieren, werden nicht mehr unterstützt. Weitere Informationen finden Sie unter Häufige Fragen zu im Browser gehosteten WPF-Anwendungen (XBAP).

Dieses Thema enthält die folgenden Abschnitte:

Erstellen einer neuen XAML-Browseranwendung (XBAP)

Die einfachste Möglichkeit zum Erstellen eines neuen XBAP-Projekts ist Visual Studio. Wählen Sie beim Erstellen eines neuen Projekts WPF-Browseranwendung aus der Liste der Vorlagen aus. Weitere Informationen finden Sie unter How to: Create a New WPF Browser Application Project.

Wenn Sie das XBAP-Projekt ausführen, wird es in einem Browserfenster anstelle eines eigenständigen Fensters geöffnet. Wenn Sie das XBAP aus Visual Studio debuggen, wird die Anwendung mit Internetzonenberechtigung ausgeführt und löst daher Sicherheitsausnahmen aus, wenn diese Berechtigungen überschritten werden. Weitere Informationen finden Sie unter Security und WPF Partial Trust Security.

Anmerkung

Wenn Sie nicht mit Visual Studio entwickeln oder mehr über die Projektdateien erfahren möchten, lesen Sie Erstellen einer WPF-Anwendung.

Bereitstellen eines XBAP

Wenn Sie ein XBAP erstellen, enthält die Ausgabe die folgenden drei Dateien:

Datei Beschreibung
Ausführbare Datei (.exe) Dieses enthält den kompilierten Code und hat eine .exe-Dateierweiterung.
Anwendungsmanifest (.manifest) Dieses enthält Metadaten, die der Anwendung zugeordnet sind und eine .manifest-Erweiterung haben.
Bereitstellungsmanifest (XBAP) Diese Datei enthält die Informationen, die ClickOnce zum Bereitstellen der Anwendung verwendet und besitzt die Erweiterung .xbap.

Sie stellen XBAPs auf einem Webserver bereit, z. B. Microsoft Internet-Informationsdienste (IIS) 5.0 oder höher. Sie müssen .NET Framework nicht auf dem Webserver installieren, aber Sie müssen die MIME-Typen (WPF Multipurpose Internet Mail Extensions) und Dateinamenerweiterungen registrieren. Weitere Informationen finden Sie unter Konfigurieren von IIS 5.0 und IIS 6.0 zur Bereitstellung von WPF-Anwendungen.

Um Ihre XBAP für die Bereitstellung vorzubereiten, kopieren Sie .exe und die zugehörigen Manifeste auf den Web-Server. Erstellen Sie eine HTML-Seite, die einen Link enthält, um das Bereitstellungsmanifest zu öffnen, bei dem es sich um die Datei mit der Erweiterung XBAP handelt. Wenn der Benutzer auf den Link zur XBAP-Datei klickt, verarbeitet ClickOnce automatisch die Mechanik des Herunterladens und Startens der Anwendung. Der folgende Beispielcode zeigt eine HTML-Seite, die einen Link enthält, der auf ein XBAP verweist.

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

Sie können auch ein XBAP im Rahmen einer Webseite hosten. Erstellen Sie eine Webseite mit einem oder mehreren Frames. Legen Sie die Quelleigenschaft eines Frames auf die Bereitstellungsmanifestdatei fest. Wenn Sie den integrierten Mechanismus verwenden möchten, um zwischen der Hostingwebseite und dem XBAP zu kommunizieren, müssen Sie die Anwendung in einem Frame hosten. Der folgende Beispielcode zeigt eine HTML-Seite mit zwei Frames, die Quelle für den zweiten Frame wird auf ein XBAP festgelegt.

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

Löschen zwischengespeicherter XBAPs

In einigen Fällen nach der Neuerstellung und dem Starten Ihres XBAP stellen Sie möglicherweise fest, dass eine frühere Version der XBAP geöffnet wird. Dieses Verhalten kann beispielsweise auftreten, wenn Ihre XBAP-Assemblyversionsnummer statisch ist und Sie die XBAP über die Befehlszeile starten. Da in diesem Fall die Versionsnummer zwischen der zwischengespeicherten Version (die version, die zuvor gestartet wurde) und die neue Version unverändert bleibt, wird die neue Version der XBAP nicht heruntergeladen. Stattdessen wird die zwischengespeicherte Version geladen.

In diesen Fällen können Sie die zwischengespeicherte Version mithilfe des Befehls Mage (installiert mit Visual Studio oder dem Windows SDK) an der Eingabeaufforderung entfernen. Mit dem folgenden Befehl wird der Anwendungscache gelöscht.

Mage.exe -cc

Dieser Befehl garantiert, dass die neueste Version Ihres XBAP gestartet wird. Wenn Sie Ihre Anwendung in Visual Studio debuggen, sollte die neueste Version Ihres XBAP gestartet werden. Im Allgemeinen sollten Sie Ihre Bereitstellungsversionsnummer mit jedem Build aktualisieren. Weitere Informationen zu Mage finden Sie unter Mage.exe (Tool zur Erstellung und Bearbeitung von Manifesten).

Kommunikation mit der Host-Webseite

Wenn die Anwendung in einem HTML-Frame gehostet wird, können Sie mit der Webseite kommunizieren, die den XBAP enthält. Dazu wird die HostScript-Eigenschaft von BrowserInteropHelperabgerufen. Diese Eigenschaft gibt ein Skriptobjekt zurück, das das HTML-Fenster darstellt. Anschließend können Sie mithilfe der regulären Punktsyntax auf die Eigenschaften, Methoden und Ereignisse des Fensterobjekts zugreifen. Sie können auch auf Skriptmethoden und globale Variablen zugreifen. Das folgende Beispiel zeigt, wie das Skriptobjekt abgerufen und der Browser geschlossen wird.

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

Debuggen von XBAPs, die HostScript verwenden

Wenn Ihr XBAP das HostScript-Objekt für die Kommunikation mit dem HTML-Fenster verwendet, gibt es zwei Einstellungen, die Sie angeben müssen, um die Anwendung in Visual Studio auszuführen und zu debuggen. Die Anwendung muss Zugriff auf ihre Ursprungswebsite haben, und Sie müssen die Anwendung mit der HTML-Seite starten, die den XBAP enthält. In den folgenden Schritten wird beschrieben, wie Sie diese beiden Einstellungen überprüfen:

  1. Öffnen Sie die Projekteigenschaften in Visual Studio.

  2. Klicken Sie auf der Registerkarte Security auf Advanced.

    Das Dialogfeld "Erweiterte Sicherheitseinstellungen" wird angezeigt.

  3. Stellen Sie sicher, dass das Kontrollkästchen Der Anwendung Zugriff auf ihren Herkunftsort gewähren aktiviert ist, und klicken Sie dann auf OK.

  4. Wählen Sie auf der Registerkarte Debuggen die Option 'Startbrowser mit URL' aus, und geben Sie die URL für die HTML-Seite an, die den XBAP enthält.

  5. Klicken Sie in Internet Explorer auf die Schaltfläche Extras und wählen Sie anschließend Internetoptionenaus.

    Das Dialogfeld "Internetoptionen" wird angezeigt.

  6. Klicken Sie auf die Registerkarte Erweitert.

  7. Aktivieren Sie in der Liste Einstellungen unter Sicherheitdas Kontrollkästchen Zulassen, dass aktive Inhalte in Dateien auf meinem Computer ausgeführt werden.

  8. Klicken Sie auf OK.

    Die Änderungen werden nach dem Neustart von Internet Explorer wirksam.

Vorsicht

Das Aktivieren aktiver Inhalte in Internet Explorer kann Ihren Computer gefährden. Wenn Sie Ihre Internet Explorer-Sicherheitseinstellungen nicht ändern möchten, können Sie die HTML-Seite von einem Server starten und den Visual Studio-Debugger an den Prozess anfügen.

Überlegungen zur XBAP-Sicherheit

XBAPs werden in der Regel in einer teilweise vertrauenswürdigen Sicherheits-Sandbox ausgeführt, die auf den Berechtigungssatz für die Internetzone beschränkt ist. Daher muss Ihre Implementierung die Teilmenge der WPF-Elemente unterstützen, die in der Internetzone unterstützt werden, oder Sie müssen die Berechtigungen Ihrer Anwendung erhöhen. Weitere Informationen finden Sie unter Security.

Wenn Sie ein WebBrowser-Steuerelement in Ihrer Anwendung verwenden, instanziiert WPF intern das systemeigene WebBrowser ActiveX-Steuerelement. Wenn Ihre Anwendung ein teilweise vertrauenswürdiges XBAP ist, das in Internet Explorer ausgeführt wird, läuft das ActiveX-Steuerelement in einem dedizierten Thread des Internet Explorer-Prozesses. Daher gelten die folgenden Einschränkungen:

  • Das WebBrowser-Steuerelement sollte ein ähnliches Verhalten wie der Hostbrowser bieten, einschließlich Sicherheitseinschränkungen. Einige dieser Sicherheitseinschränkungen können über die Sicherheitseinstellungen von Internet Explorer gesteuert werden. Weitere Informationen finden Sie unter Security.

  • Eine Ausnahme wird ausgelöst, wenn ein XBAP domänenübergreifend auf einer HTML-Seite geladen wird.

  • Die Eingabe erfolgt in einem separaten Thread von WPF WebBrowser, sodass Tastatureingaben nicht abgefangen werden können und der IME-Zustand nicht gemeinsam genutzt wird.

  • Der Zeitpunkt oder die Reihenfolge der Navigation kann sich aufgrund des ActiveX-Steuerelements unterscheiden, das auf einem anderen Thread ausgeführt wird. Beispielsweise wird das Navigieren zu einer Seite nicht immer abgebrochen, indem eine andere Navigationsanforderung gestartet wird.

  • Ein benutzerdefiniertes ActiveX-Steuerelement kann Probleme mit der Kommunikation haben, da die WPF-Anwendung in einem separaten Thread ausgeführt wird.

  • MessageHook wird nicht ausgelöst, da HwndHost ein Fenster, das in einem anderen Thread oder Prozess ausgeführt wird, nicht untergliedert werden kann.

Erstellen eines Full-Trust XBAP

Wenn Ihr XBAP volle Vertrauenswürdigkeit erfordert, können Sie Ihr Projekt ändern, um diese Berechtigung zu ermöglichen. Die folgenden Schritte beschreiben, wie man vollständiges Vertrauen aktiviert.

  1. Öffnen Sie in Visual Studio die Projekteigenschaften.

  2. Wählen Sie auf der Registerkarte Sicherheits- die Option Dies ist eine vollständige Vertrauensanwendung.

Diese Einstellung nimmt die folgenden Änderungen vor:

  • In der Projektdatei wird der Wert des <TargetZone>-Elements auf Customgeändert.

  • Im Anwendungsmanifest (app.manifest) wird dem "PermissionSet-Element ein Unrestricted="true"-Attribut hinzugefügt.

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

Bereitstellen eines Full-Trust XBAP

Wenn Sie ein voll vertrauenswürdiges XBAP bereitstellen, das nicht dem ClickOnce Trusted Deployment-Modell folgt, hängt das Verhalten beim Ausführen der Anwendung von der Sicherheitszone ab. In einigen Fällen erhält der Benutzer eine Warnung, wenn er versucht, ihn zu installieren. Der Benutzer kann die Installation fortsetzen oder abbrechen. In der folgenden Tabelle wird das Verhalten der Anwendung in jeder Sicherheitszone beschrieben und was Sie tun müssen, damit die Anwendung volle Vertrauensrechte erhält.

Sicherheitszone Verhalten Vollständiges Vertrauen erlangen
Lokaler Computer Automatisches volles Vertrauen Es ist keine Aktion erforderlich.
Intranet und vertrauenswürdige Websites Aufforderung zum vollständigen Vertrauen Signieren Sie die XBAP mit einem Zertifikat, damit der Benutzer die Quelle in der Eingabeaufforderung sieht.
Internet Schlägt mit "Vertrauensstellung nicht gewährt" fehl. Signieren Sie die XBAP mit einem Zertifikat.

Anmerkung

Das in der vorherigen Tabelle beschriebene Verhalten gilt für voll vertrauenswürdige XBAPs, die nicht dem ClickOnce Trusted Deployment-Modell folgen.

Es wird empfohlen, das ClickOnce Trusted Deployment-Modell für die Bereitstellung eines voll vertrauenswürdigen XBAP zu verwenden. Mit diesem Modell kann Ihrem XBAP automatisch vollständiges Vertrauen gewährt werden, unabhängig von der Sicherheitszone, sodass der Benutzer keine Aufforderung erhält. Im Rahmen dieses Modells müssen Sie Ihre Anwendung mit einem Zertifikat von einem vertrauenswürdigen Herausgeber signieren. Weitere Informationen finden Sie unter Vertrauenswürdige Anwendungen: Übersicht über deren Bereitstellung und Einführung in die Code-Signierung.

Überlegungen zur Startzeitperformance von XBAP

Ein wichtiger Aspekt der XBAP-Leistung ist die Startzeit. Wenn eine XBAP die erste WPF-Anwendung ist, die geladen werden soll, kann der Kaltstart Zeit zehn Sekunden oder mehr betragen. Dies liegt daran, dass die Fortschrittsanzeige von WPF gerendert wird, wobei sowohl der CLR als auch WPF kalt gestartet werden müssen, um die Anwendung anzuzeigen.

Ab .NET Framework 3.5 SP1 wird die XBAP-Kaltstartzeit verringert, indem eine nicht verwaltete Statusseite frühzeitig im Bereitstellungszyklus angezeigt wird. Die Statusseite wird fast unmittelbar nach dem Starten der Anwendung angezeigt, da sie von systemeigenem Hostingcode angezeigt und in HTML gerendert wird.

Darüber hinaus verbessert die Parallelität der ClickOnce-Downloadsequenz die Startzeit um bis zu zehn Prozent. Nachdem ClickOnce Manifeste heruntergeladen und überprüft hat, wird der Anwendungsdownload gestartet, und die Statusleiste beginnt mit der Aktualisierung.

Siehe auch