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 werden und über Internet Explorer oder Firefox unter Windows gestartet werden. XBAPs können von den Funktionen von WPF profitieren, genau wie Rich Client-Anwendungen. Auch die Entwicklung von XBAPs ähnelt der Rich Client-Entwicklung. Dieses Thema bietet eine allgemeine einfache Einführung in die XBAP-Entwicklung und beschreibt die Unterschiede zwischen der Entwicklung von XBAP und standardmäßigen Rich Client-Anwendungen.

Warnung

XBAPs erfordern Legacybrowser, z. B. Internet Explorer und ältere Versionen von Firefox. Diese älteren Browser werden unter Windows 10 und Windows 11 normalerweise 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äufig gestellte Fragen zu von browsergehosteten WPF-Anwendungen (XBAP).

Dieses Thema enthält folgende Abschnitte:

Erstellen einer neuen XAML-Browseranwendung (XBAP)

Die einfachste Methode zum Erstellen eines neuen XBAP-Projekts bietet Visual Studio. Wenn Sie ein neues Projekt erstellen, wählen Sie WPF-Browseranwendung aus der Liste der Vorlagen aus. Weitere Informationen finden Sie unter Vorgehensweise: Erstellen eines neuen WPF-Browseranwendungsprojekts.

Wenn Sie das XBAP-Projekt ausführen, wird es in einem Browserfenster geöffnet, nicht in einem eigenständigen Fenster. Wenn Sie die XBAP von Visual Studio aus debuggen, wird die Anwendung mit Internetzonenberechtigung ausgeführt und löst daher Sicherheitsausnahmen aus, wenn diese Berechtigungen überschritten werden. Weitere Informationen finden Sie unter Sicherheit (WPF) und WPF-Sicherheit mit teilweiser Vertrauenswürdigkeit.

Hinweis

Wenn Sie nicht mit Visual Studio entwickeln oder mehr über die Projektdateien erfahren möchten, finden Sie weitere Informationen unter Erstellen einer WPF-Anwendung (WPF).

Bereitstellen einer XBAP

Wenn Sie eine XBAP erstellen, schließt die Ausgabe die folgenden drei Dateien ein:

Datei Beschreibung
Ausführbare Datei (.exe) Diese enthält den kompilierten Code und hat die Erweiterung EXE.
Anwendungsmanifest (.manifest) Dieses enthält die der Anwendung zugeordneten Metadaten und hat die Erweiterung MANIFEST.
Bereitstellungsmanifest (.xbap) Dieses enthält die Informationen, die ClickOnce zum Bereitstellen der Anwendung verwendet. Sie hat die Erweiterung „.xbap“.

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

Zum Vorbereiten der XBAP für die Bereitstellung kopieren Sie die EXE-Datei und die zugeordneten Manifeste auf den Webserver. Erstellen Sie eine HTML-Seite, die einen Link enthält, um das Bereitstellungsmanifest zu öffnen. Dabei handelt es sich um die Datei mit der Erweiterung XBAP. Wenn ein Benutzer auf den Link zur XBAP-Datei klickt, wird das Herunterladen und Starten der Anwendung automatisch von ClickOnce erledigt. Im folgenden Beispielcode wird eine HTML-Seite dargestellt, die einen Link enthält, der auf eine XBAP zeigt.

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

Sie können eine XBAP auch im Frame 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 der XBAP zu kommunizieren, müssen Sie die Anwendung in einem Frame hosten. Im folgenden Beispielcode ist eine HTML-Seite mit zwei Frames dargestellt, wobei die Quelle für den zweiten Frame auf eine XBAP festgelegt ist.

<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 von zwischengespeicherten XBAPs

In einigen Situationen stellen Sie nach dem Neuerstellen und Starten der XBAP fest, dass eine frühere Version der XBAP geöffnet wird. Dieses Verhalten kann beispielsweise auftreten, wenn die XBAP-Assemblyversionsnummer statisch ist und Sie die XBAP über die Befehlszeile starten. Da die Versionsnummer der zwischengespeicherten Version (die zuvor gestartet wurde) in diesem Fall mit der Nummer der neuen Version übereinstimmt, wird die neue Version der XBAP nicht heruntergeladen. Es wird stattdessen die zwischengespeicherte Version geladen.

In diesen Situationen können Sie die zwischengespeicherte Version entfernen, indem Sie den Befehl Mage (der mit Visual Studio oder der Windows SDK installiert wird) über die Befehlszeile ausführen. Der folgende Befehl löscht den Anwendungscache.

Mage.exe -cc

Dieser Befehl gewährleistet, dass die neueste Version der XBAP gestartet wird. Wenn Sie die Anwendung in Visual Studio debuggen, sollte die aktuelle Version der XBAP gestartet werden. Es wird empfohlen, die Bereitstellungsversionsnummer mit jedem Build zu aktualisieren. Weitere Informationen über Mage finden Sie unter Mage.exe (Tool zum Generieren und Bearbeiten von Manifesten).

Kommunizieren mit der Hostwebseite

Wenn die Anwendung in einem HTML-Frame gehostet wird, können Sie mit der Webseite kommunizieren, die die XBAP enthält. Dazu rufen Sie die HostScript-Eigenschaft von BrowserInteropHelper ab. Diese Eigenschaft gibt ein Skriptobjekt zurück, das das HTML-Fenster darstellt. Sie können dann auf die Eigenschaften, Methoden und Ereignisse auf dem Fensterobjekt mit regulärer Punktsyntax zugreifen. Sie können auch auf Skriptmethoden und globale Variablen zugreifen. Im folgenden Beispiel wird veranschaulicht, wie Sie das Skriptobjekt abrufen und den Browser schließen.

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 die XBAP das HostScript-Objekt verwendet, um mit dem HTML-Fenster zu kommunizieren, müssen Sie zwei Einstellungen angeben, um die Anwendung in Visual Studio auszuführen und zu debuggen. Die Anwendung muss Zugriff auf ihre Ursprungssite haben, und Sie müssen die Anwendung mit der HTML-Seite starten, die die XBAP enthält. Die folgenden Schritte beschreiben, wie diese beiden Einstellungen überprüft werden:

  1. Öffnen Sie die Projekteigenschaften in Visual Studio.

  2. Klicken Sie auf der Registerkarte Sicherheit auf Erweitert.

    Das Dialogfeld "Erweiterte Sicherheitseinstellungen" wird angezeigt.

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

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

  5. Klicken Sie in Internet Explorer auf die Schaltfläche Extras, und wählen Sie dann Internetoptionen aus.

    Das Dialogfeld "Internetoptionen" wird angezeigt.

  6. Klicken Sie auf die Registerkarte Erweitert.

  7. Aktivieren Sie in der Liste Einstellungen unter Sicherheit das Kontrollkästchen Ausführung aktiver Inhalte in Dateien auf dem lokalen Computer zulassen.

  8. Klicken Sie auf OK.

    Die Änderungen werden wirksam, nachdem Sie Internet Explorer neu gestartet haben.

Achtung

Aktiven Inhalt in Internet Explorer zu aktivieren, gefährdet möglicherweise den Computer. Wenn Sie die Internet Explorer-Sicherheitseinstellungen nicht ändern wollen, können Sie die HTML-Seite von einem Server starten und den Visual Studio-Debugger an den Prozess anfügen.

XBAP-Sicherheitsüberlegungen

XBAPs werden in der Regel in einem teilweise vertrauenswürdigen Sicherheitsbereich (Sandbox) ausgeführt, der 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 der Anwendung erweitern. Weitere Informationen finden Sie unter Sicherheit.

Wenn Sie ein WebBrowser-Steuerelement in der Anwendung verwenden, instanziiert WPF das native WebBrowser-ActiveX-Steuerelement intern. Wenn die Anwendung eine teilweise vertrauenswürdige XBAP ist, die in Internet Explorer ausgeführt wird, wird das ActiveX-Steuerelement in einem dedizierten Thread des Internet Explorer-Prozesses ausgeführt. Daher gelten die folgenden Einschränkungen:

  • Das WebBrowser-Steuerelement sollte Verhalten bereitstellen, das dem Hostbrowser ähnelt, einschließlich Sicherheitseinschränkungen. Einige dieser Sicherheitseinschränkungen können durch die Internet Explorer-Sicherheitseinstellungen gesteuert werden. Weitere Informationen finden Sie unter Sicherheit.

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

  • Die Eingabe erfolgt in einem separaten Thread aus dem WPF-WebBrowser, sodass Tastatureingaben nicht abgefangen werden können und der IME-Zustand nicht freigegeben ist.

  • Die zeitliche Steuerung oder die Reihenfolge der Navigation weicht möglicherweise ab, da das ActiveX-Steuerelement in einem anderen Thread ausgeführt wird. Zum Beispiel wird die Navigation zu einer Seite nicht immer abgebrochen, indem eine andere Navigationsanforderung gestartet wird.

  • Ein benutzerdefiniertes ActiveX-Steuerelement hat möglicherweise Probleme mit Kommunikation, da die WPF-Anwendung in einem separaten Thread ausgeführt wird.

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

Erstellen einer XBAP mit voller Vertrauenswürdigkeit

Wenn die XBAP volle Vertrauenswürdigkeit erfordert, können Sie das Projekt ändern, um diese Berechtigung zu aktivieren. Die folgenden Schritte beschreiben, wie volle Vertrauenswürdigkeit aktiviert wird:

  1. Öffnen Sie die Projekteigenschaften in Visual Studio.

  2. Aktivieren Sie die Option Voll vertrauenswürdige Anwendung auf der Registerkarte Sicherheit.

Diese Einstellung nimmt die folgenden Änderungen vor:

  • In der Projektdatei wird der <TargetZone>-Elementwert in Custom geändert.

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

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

Bereitstellen einer XBAP mit voller Vertrauenswürdigkeit

Wenn Sie eine vollständig vertrauenswürdige XBAP bereitstellen, die nicht dem ClickOnce Trusted-Bereitstellungsmodell folgt, hängt das Verhalten bei der Ausführung der Anwendung durch den Benutzer von der Sicherheitszone ab. In einigen Fällen erhält der Benutzer bei der Installation eine Warnung. Der Benutzer kann auswählen, ob die Installation fortgesetzt oder abgebrochen werden soll. In der folgenden Tabelle werden das Verhalten der Anwendung für jede Sicherheitszone und die erforderlichen Schritte für die volle Vertrauenswürdigkeit der Anwendung beschrieben.

Sicherheitszone Verhalten Erhalten der vollen Vertrauenswürdigkeit
Lokalem Computer Automatisch volle Vertrauenswürdigkeit Es ist keine Aktion erforderlich.
Intranet und vertrauenswürdige Websites Eingabeaufforderung für volle Vertrauenswürdigkeit Signieren Sie die XBAP mit einem Zertifikat, damit der Benutzer die Quelle in der Eingabeaufforderung sieht.
Internet Schlägt fehl mit „Vertrauenswürdigkeit nicht gewährt“ Signieren Sie die XBAP mit einem Zertifikat.

Hinweis

Das in der obigen Tabelle beschriebene Verhalten gilt für vollständig vertrauenswürdige XBAPs, die nicht dem ClickOnce Trusted-Bereitstellungsmodell folgen.

Es wird empfohlen, dass Sie das ClickOnce Trusted-Bereitstellungsmodell zum Bereitstellen einer vollständig vertrauenswürdigen XBAP verwenden. Mit diesem Modell können Sie der XBAP unabhängig von der Sicherheitszone automatisch die volle Vertrauenswürdigkeit gewähren lassen, sodass der Benutzer nicht aufgefordert wird. Als Teil dieses Modells müssen Sie die Anwendung mit einem Zertifikat für einen vertrauenswürdigen Verleger signieren. Weitere Informationen finden Sie unter Überblick über die Bereitstellung vertrauenswürdiger Anwendungen und Introduction to Code Signing (Einführung in die Codesignatur).

Überlegungen zur XBAP-Startzeitleistung

Ein wichtiger Aspekt der XBAP-Leistung ist ihre Startzeit. Falls eine XPAB die erste zu ladende WPF-Anwendung darstellt, kann die Kaltstartzeit zehn Sekunden oder mehr betragen. Dies ist darauf zurückzuführen, dass die Statusseite von WPF gerendert wird und sowohl die CLR als auch WPF für die Anzeige der Anwendung kaltgestartet werden müssen.

Ab .NET Framework 3.5 SP1 wird die XBAP-Kaltstartzeit reduziert, indem eine nicht verwaltete Statusseite in einer frühen Phase im Bereitstellungszyklus angezeigt wird. Die Statusseite wird fast unmittelbar nach dem Start der Anwendung angezeigt, da sie mit nativen Hostingcode angezeigt und in HTML gerendert wird.

Außerdem wird durch eine verbesserte Parallelität der ClickOnce-Downloadsequenz die Startzeit um bis zu zehn Prozent verbessert. Nachdem ClickOnce Manifeste heruntergeladen und überprüft hat, beginnt der Anwendungsdownload und die Statusanzeige wird aktualisiert.

Weitere Informationen