Übersicht über WPF-XAML-BrowseranwendungenWPF XAML Browser Applications Overview

XAML-Browseranwendungen (XAML browser applications; XBAPs)XAML browser applications (XBAPs) kombiniert die Funktionen von Webanwendungen und Rich-Client-Anwendungen.XAML-Browseranwendungen (XAML browser applications; XBAPs)XAML browser applications (XBAPs) combines features of both Web applications and rich-client applications. Wie Webanwendungen können XBAPs auf einem Webserver bereitgestellt werden und aus Internet Explorer oder Firefox gestartet werden.Like Web applications, XBAPs can be deployed to a Web server and started from Internet Explorer or Firefox. XBAPs können von den Funktionen von WPFWPF profitieren, genau wie Rich Client-Anwendungen.Like rich-client applications, XBAPs can take advantage of the capabilities of WPFWPF. Auch die Entwicklung von XBAPs ähnelt der Rich Client-Entwicklung.Developing XBAPs is also similar to rich-client development. 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.This topic provides a simple, high-level introduction to XBAP development and describes where XBAP development differs from standard rich-client development.

Dieses Thema enthält folgende Abschnitte:This topic contains the following sections:

Erstellen einer neuen XAML-Browseranwendung (XBAP)Creating a New XAML Browser Application (XBAP)

Die einfachste Methode zum Erstellen eines neuen XBAP-Projekts bietet Microsoft Visual Studio 2010Microsoft Visual Studio 2010.The simplest way to create a new XBAP project is with Microsoft Visual Studio 2010Microsoft Visual Studio 2010. Wenn Sie ein neues Projekt erstellen, wählen Sie WPF-Browseranwendung aus der Liste der Vorlagen aus.When creating a new project, select WPF Browser Application from the list of templates. Weitere Informationen finden Sie unter Vorgehensweise: Erstellen eines neuen WPF-Browseranwendungsprojekts.For more information, see How to: Create a New WPF Browser Application Project.

Wenn Sie das XBAP-Projekt ausführen, wird es in einem Browserfenster geöffnet, nicht in einem eigenständigen Fenster.When you run the XBAP project, it opens in a browser window instead of a stand-alone window. Wenn Sie die XBAP aus Microsoft Visual StudioMicrosoft Visual Studio debuggen, wird die Anwendung mit Internetzonenberechtigung ausgeführt und löst daher Sicherheitsausnahmen aus, wenn diese Berechtigungen überschritten werden.When you debug the XBAP from Microsoft Visual StudioMicrosoft Visual Studio, the application runs with Internet zone permission and will therefore throw security exceptions if those permissions are exceeded. Weitere Informationen finden Sie unter Sicherheit (WPF) und WPF-Sicherheit mit teilweiser Vertrauenswürdigkeit.For more information, see Security and WPF Partial Trust Security.

Hinweis

Wenn Sie nicht mit Microsoft Visual StudioMicrosoft Visual Studio entwickeln oder mehr über die Projektdateien erfahren möchten, finden Sie weitere Informationen unter Erstellen einer WPF-Anwendung (WPF).If you are not developing with Microsoft Visual StudioMicrosoft Visual Studio or want to learn more about the project files, see Building a WPF Application.

Bereitstellen einer XBAPDeploying an XBAP

Wenn Sie eine XBAP erstellen, schließt die Ausgabe die folgenden drei Dateien ein:When you build an XBAP, the output includes the following three files:

DateiFile BeschreibungDescription
Ausführbare Datei (.exe)Executable (.exe) Diese enthält den kompilierten Code und hat die Erweiterung EXE.This contains the compiled code and has an .exe extension.
Anwendungsmanifest (.manifest)Application manifest (.manifest) Dieses enthält die der Anwendung zugeordneten Metadaten und hat die Erweiterung MANIFEST.This contains metadata associated with the application and has a .manifest extension.
Bereitstellungsmanifest (.xbap)Deployment manifest (.xbap) Dieses enthält die Informationen, die ClickOnceClickOnce zum Bereitstellen der Anwendung verwendet. Sie hat die Erweiterung XBAP.This file contains the information that ClickOnceClickOnce uses to deploy the application and has the .xbap extension.

Sie stellen XBAPs auf einem Webserver, z.B. Microsoft-Internetinformationsdienste 5.0 (Internet Information Services; IIS)Microsoft Internet Information Services (IIS) 5.0 oder höheren Versionen, bereit.You deploy XBAPs to a Web server, for example Microsoft-Internetinformationsdienste 5.0 (Internet Information Services; IIS)Microsoft Internet Information Services (IIS) 5.0 or later versions. Sie keine .NET Framework auf dem Webserver zu installieren, aber Sie müssen zum Registrieren der WPFWPF Multipurpose Internet Mail Extensions (MIME)Multipurpose Internet Mail Extensions (MIME) Dateinamenerweiterungen für Typen und den Dateinamen.You do not have to install the .NET Framework on the Web server, but you do have to register the WPFWPF Multipurpose Internet Mail Extensions (MIME)Multipurpose Internet Mail Extensions (MIME) types and file name extensions. Weitere Informationen finden Sie unter Vorgehensweise: Konfigurieren von IIS 5.0 und IIS 6.0, um WPF-Anwendungen bereitzustellen.For more information, see Configure IIS 5.0 and IIS 6.0 to Deploy WPF Applications.

Zum Vorbereiten der XBAP für die Bereitstellung kopieren Sie die EXE-Datei und die zugeordneten Manifeste auf den Webserver.To prepare your XBAP for deployment, copy the .exe and the associated manifests to the Web server. 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.Create an HTML page that contains a hyperlink to open the deployment manifest, which is the file that has the .xbap extension. Wenn ein Benutzer auf den Link zur XBAP-Datei klickt, wird das Herunterladen und Starten der Anwendung automatisch von ClickOnceClickOnce erledigt.When the user clicks the link to the .xbap file, ClickOnceClickOnce automatically handles the mechanics of downloading and starting the application. Im folgenden Beispielcode wird eine HTML-Seite dargestellt, die einen Link enthält, der auf eine XBAP zeigt.The following example code shows an HTML page that contains a hyperlink that points to an XBAP.

<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.You can also host an XBAP in the frame of a Web page. Erstellen Sie eine Webseite mit einem oder mehreren Frames.Create a Web page with one or more frames. Legen Sie die Quelleigenschaft eines Frames auf die Bereitstellungsmanifestdatei fest.Set the source property of a frame to the deployment manifest file. 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.If you want to use the built-in mechanism to communicate between the hosting Web page and the XBAP, you must host the application in a frame. Im folgenden Beispielcode ist eine HTML-Seite mit zwei Frames dargestellt, wobei die Quelle für den zweiten Frame auf eine XBAP festgelegt ist.The following example code shows an HTML page with two frames, the source for the second frame is set to an XBAP.

<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 XBAPsClearing Cached XBAPs

In einigen Situationen stellen Sie nach dem Neuerstellen und Starten der XBAP fest, dass eine frühere Version der XBAP geöffnet wird.In some situations after rebuilding and starting your XBAP, you may find that an earlier version of the XBAP is opened. Dieses Verhalten kann beispielsweise auftreten, wenn die XBAP-Assemblyversionsnummer statisch ist und Sie die XBAP über die Befehlszeile starten.For example, this behavior may occur when your XBAP assembly version number is static and you start the XBAP from the command line. Da die Versionsnummer zwischen die zwischengespeicherte Version (die Version, die zuvor gestartet wurde) und die neue Version gleich bleibt, wird die neue Version der XBAP in diesem Fall nicht heruntergeladen.In this case, because the version number between the cached version (the version that was previously started) and the new version remains the same, the new version of the XBAP is not downloaded. Stattdessen wird die zwischengespeicherte Version geladen.Instead, the cached version is loaded.

In diesen Situationen können Sie die zwischengespeicherte Version entfernen, indem Sie den Befehl Mage (der mit Visual Studio oder Windows SDKWindows SDK installiert wird) über die Befehlszeile ausführen.In these situations, you can remove the cached version by using the Mage command (installed with Visual Studio or the Windows SDKWindows SDK) at the command prompt. Der folgende Befehl löscht den Anwendungscache.The following command clears the application cache.

Mage.exe -cc

Dieser Befehl gewährleistet, dass die neueste Version der XBAP gestartet wird.This command guarantees that the latest version of your XBAP is started. Wenn Sie die Anwendung in Visual StudioVisual Studio debuggen, sollte die aktuelle Version der XBAP gestartet werden.When you debug your application in Visual StudioVisual Studio, the latest version of your XBAP should be started. Es wird empfohlen, die Bereitstellungsversionsnummer mit jedem Build zu aktualisieren.In general, you should update your deployment version number with each build. Weitere Informationen über Mage finden Sie unter Mage.exe (Tool zum Generieren und Bearbeiten von Manifesten).For more information about Mage, see Mage.exe (Manifest Generation and Editing Tool).

Kommunizieren mit der HostwebseiteCommunicating with the Host Web Page

Wenn die Anwendung in einem HTML-Frame gehostet wird, können Sie mit der Webseite kommunizieren, die die XBAP enthält.When the application is hosted in an HTML frame, you can communicate with the Web page that contains the XBAP. Zu diesem Zweck wird das Abrufen der HostScript Eigenschaft BrowserInteropHelper.You do this by retrieving the HostScript property of BrowserInteropHelper. Diese Eigenschaft gibt ein Skriptobjekt zurück, das das HTML-Fenster darstellt.This property returns a script object that represents the HTML window. Sie können dann auf die Eigenschaften, Methoden und Ereignisse auf dem Fensterobjekt mit regulärer Punktsyntax zugreifen.You can then access the properties, methods, and events on the window object by using regular dot syntax. Sie können auch auf Skriptmethoden und globale Variablen zugreifen.You can also access script methods and global variables. Im folgenden Beispiel wird veranschaulicht, wie Sie das Skriptobjekt abrufen und den Browser schließen.The following example shows how to retrieve the script object and close the browser.

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 verwendenDebugging XBAPs that Use HostScript

Wenn XBAP verwendet die HostScript Objekt für die Kommunikation mit HTML-Fenster, es gibt zwei Einstellungen, die Sie angeben, müssen zum Ausführen und Debuggen der Anwendung in Visual StudioVisual Studio.If your XBAP uses the HostScript object to communicate with the HTML window, there are two settings that you must specify to run and debug the application in Visual StudioVisual Studio. Die Anwendung muss Zugriff auf ihre Ursprungssite haben, und Sie müssen die Anwendung mit der HTML-Seite starten, die die XBAP enthält.The application must have access to its site of origin and you must start the application with the HTML page that contains the XBAP. Die folgenden Schritte beschreiben, wie diese beiden Einstellungen überprüft werden:The following steps describe how to check these two settings:

  1. Öffnen Sie die Projekteigenschaften in Visual Studio.In Visual Studio, open the project properties.

  2. Klicken Sie auf der Registerkarte Sicherheit auf Erweitert.On the Security tab, click Advanced.

    Das Dialogfeld „Erweiterte Sicherheitseinstellungen“wird angezeigt.The Advanced Security Settings dialog box appears.

  3. Stellen Sie sicher, dass das Kontrollkästchen Der Anwendung Zugriff auf die Ursprungssite gewähren aktiviert ist, und klicken Sie dann auf OK.Make sure that the Grant the application access to its site of origin check box is checked and then click 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.On the Debug tab, select the Start browser with URL option and specify the URL for the HTML page that contains the XBAP.

  5. Klicken Sie in Internet Explorer auf die Schaltfläche Extras, und wählen Sie dann Internetoptionen aus.In Internet Explorer, click the Tools button and then select Internet Options.

    Das Dialogfeld "Internetoptionen" wird angezeigt.The Internet Options dialog box appears.

  6. Klicken Sie auf die Registerkarte Erweitert.Click the Advanced tab.

  7. Aktivieren Sie in der Liste Einstellungen unter Sicherheit das Kontrollkästchen Ausführung aktiver Inhalte in Dateien auf dem lokalen Computer zulassen.In the Settings list under Security, check the Allow active content to run in files on My Computer check box.

  8. Klicken Sie auf OK.Click OK.

    Die Änderungen werden wirksam, nachdem Sie Internet Explorer neu gestartet haben.The changes will take effect after you restart Internet Explorer.

Achtung

Aktiven Inhalt in Internet Explorer zu aktivieren, gefährdet möglicherweise den Computer.Enabling active content in Internet Explorer may put your computer at risk. Weitere Informationen finden Sie unter Security and privacy features in Internet Explorer (Sicherheits- und Datenschutzfunktionen in Internet Explorer).For more information, see Security and privacy features in Internet Explorer. Wenn Sie die Internet Explorer-Sicherheitseinstellungen nicht ändern wollen, können Sie die HTML-Seite von einem Server starten und den Visual StudioVisual Studio-Debugger an den Prozess anfügen.If you do not want to change your Internet Explorer security settings, you can launch the HTML page from a server and attach the Visual StudioVisual Studio debugger to the process.

XBAP-SicherheitsüberlegungenXBAP Security Considerations

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.XBAPs typically execute in a partial-trust security sandbox that is restricted to the Internet zone permission set. Daher muss Ihre Implementierung die Teilmenge der WPFWPF-Elemente unterstützen, die in der Internetzone unterstützt werden, oder Sie müssen die Berechtigungen der Anwendung erweitern.Consequently, your implementation must support the subset of WPFWPF elements that are supported in the Internet zone or you must elevate the permissions of your application. Weitere Informationen finden Sie unter Sicherheit (WPF).For more information, see Security.

Bei Verwendung einer WebBrowser Steuerelement in der WPF-Anwendung instanziiert intern das systemeigene WebBrowser ActiveX-Steuerelement.When you use a WebBrowser control in your application, WPF internally instantiates the native WebBrowser ActiveX control. 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.When your application is a partial-trust XBAP running in Internet Explorer, the ActiveX control runs in a dedicated thread of the Internet Explorer process. Daher gelten die folgenden Einschränkungen:Therefore, the following limitations apply:

  • Die WebBrowser Steuerelement sollte ähnlich den Hostbrowser und sicherheitseinschränkungen einschließlich Verhalten bereitstellen.The WebBrowser control should provide behavior similar to the host browser, including security restrictions. Einige dieser Sicherheitseinschränkungen können durch die Internet Explorer-Sicherheitseinstellungen gesteuert werden.Some of these security restrictions can be controlled through the Internet Explorer security settings. Weitere Informationen finden Sie unter Sicherheit (WPF).For more information, see Security.

  • Eine Ausnahme wird ausgelöst, wenn eine XBAP domänenübergreifend in eine HTML-Seite geladen wird.An exception is thrown when an XBAP is loaded cross-domain in an HTML page.

  • Eingabe wird in einem separaten Thread aus der WPF WebBrowser, damit Tastatureingaben nicht abgefangen können werden und der Zustand des Eingabemethoden-Editor nicht gemeinsam genutzt wird.Input is on a separate thread from the WPF WebBrowser, so keyboard input cannot be intercepted and the IME state is not shared.

  • Die zeitliche Steuerung oder die Reihenfolge der Navigation weicht möglicherweise ab, da das ActiveX-Steuerelement in einem anderen Thread ausgeführt wird.The timing or order of navigation may be different due to the ActiveX control running on another thread. Zum Beispiel wird die Navigation zu einer Seite nicht immer abgebrochen, indem eine andere Navigationsanforderung gestartet wird.For example, navigating to a page is not always cancelled by starting another navigation request.

  • Ein benutzerdefiniertes ActiveX-Steuerelement hat möglicherweise Probleme mit Kommunikation, da die WPF-Anwendung in einem separaten Thread ausgeführt wird.A custom ActiveX control may have trouble with communication since the WPF application is running in a separate thread.

  • MessageHook wird nicht ausgelöst, da HwndHost kann nicht als Unterklasse eines Fensters in einem anderen Prozess oder Thread ausgeführt wird.MessageHook does not get raised because HwndHost cannot subclass a window running in another thread or process.

Erstellen einer XBAP mit voller VertrauenswürdigkeitCreating a Full-Trust XBAP

Wenn die XBAP volle Vertrauenswürdigkeit erfordert, können Sie das Projekt ändern, um diese Berechtigung zu aktivieren.If your XBAP requires full trust, you can change your project to enable this permission. Die folgenden Schritte beschreiben, wie volle Vertrauenswürdigkeit aktiviert wird:The following steps describe how to enable full trust:

  1. Öffnen Sie die Projekteigenschaften in Visual Studio.In Visual Studio, open the project properties.

  2. Aktivieren Sie die Option Voll vertrauenswürdige Anwendung auf der Registerkarte Sicherheit.On the Security tab, select the This is a full trust application option.

Diese Einstellung nimmt die folgenden Änderungen vor:This setting makes the following changes:

  • In der Projektdatei wird der <TargetZone>-Elementwert in Custom geändert.In the project file, the <TargetZone> element value is changed to Custom.

  • Im Anwendungsmanifest (app.manifest) wird ein Unrestricted="true"-Attribut zum PermissionSet-Element hinzugefügt.In the application manifest (app.manifest), an Unrestricted="true" attribute is added to the PermissionSet element.

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

Bereitstellen einer XBAP mit voller VertrauenswürdigkeitDeploying a Full-Trust XBAP

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.When you deploy a full-trust XBAP that does not follow the ClickOnce Trusted Deployment model, the behavior when the user runs the application will depend on the security zone. In einigen Fällen erhält der Benutzer bei der Installation eine Warnung.In some cases, the user will receive a warning when they attempt to install it. Der Benutzer kann auswählen, ob die Installation fortgesetzt oder abgebrochen werden soll.The user can choose to continue or cancel the installation. 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.The following table describes the behavior of the application for each security zone and what you have to do for the application to receive full trust.

SicherheitszoneSecurity Zone VerhaltenBehavior Erhalten der vollen VertrauenswürdigkeitGetting Full Trust
Lokaler ComputerLocal computer Automatisch volle VertrauenswürdigkeitAutomatic full trust Es ist keine Aktion erforderlich.No action is needed.
Intranet und vertrauenswürdige WebsitesIntranet and trusted sites Eingabeaufforderung für volle VertrauenswürdigkeitPrompt for full trust Signieren Sie die XBAP mit einem Zertifikat, damit der Benutzer die Quelle in der Eingabeaufforderung sieht.Sign the XBAP with a certificate so that the user sees the source in the prompt.
InternetInternet Schlägt fehl mit „Vertrauenswürdigkeit nicht gewährt“Fails with "Trust Not Granted" Signieren Sie die XBAP mit einem Zertifikat.Sign the XBAP with a certificate.

Hinweis

Das in der obigen Tabelle beschriebene Verhalten gilt für vollständig vertrauenswürdige XBAPs, die nicht dem ClickOnce Trusted-Bereitstellungsmodell folgen.The behavior described in the previous table is for full-trust XBAPs that do not follow the ClickOnce Trusted Deployment model.

Es wird empfohlen, dass Sie das ClickOnce Trusted-Bereitstellungsmodell zum Bereitstellen einer vollständig vertrauenswürdigen XBAP verwenden.It is recommended that you use the ClickOnce Trusted Deployment model for deploying a full-trust XBAP. 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.This model allows your XBAP to be granted full trust automatically, regardless of the security zone, so that the user is not prompted. Als Teil dieses Modells müssen Sie die Anwendung mit einem Zertifikat für einen vertrauenswürdigen Verleger signieren.As part of this model, you must sign your application with a certificate from a trusted publisher. Weitere Informationen finden Sie unter Überblick über die Bereitstellung vertrauenswürdiger Anwendungen und Introduction to Code Signing (Einführung in die Codesignatur).For more information, see Trusted Application Deployment Overview and Introduction to Code Signing.

Überlegungen zur XBAP-StartzeitleistungXBAP Start Time Performance Considerations

Ein wichtiger Aspekt der XBAP-Leistung ist ihre Startzeit.An important aspect of XBAP performance is its start time. Falls eine XPAB die erste zu ladende WPF-Anwendung darstellt, kann die Kaltstartzeit zehn Sekunden oder mehr betragen.If an XBAP is the first WPF application to load, the cold start time can be ten seconds or more. 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.This is because the progress page is rendered by WPF, and both the CLR and WPF must be cold-started to display the application.

Wenn Sie in .NET Framework 3.5 SP1.NET Framework 3.5 SP1 starten, wird die XBAP-Kaltstartzeit reduziert, indem eine nicht verwaltete Statusseite in einer frühen Phase im Bereitstellungszyklus angezeigt wird.Starting in .NET Framework 3.5 SP1.NET Framework 3.5 SP1, XBAP cold-start time is mitigated by displaying an unmanaged progress page early in the deployment cycle. Die Statusseite wird fast unmittelbar nach dem Start der Anwendung angezeigt, da sie mit nativen Hostingcode angezeigt und in HTML gerendert wird.The progress page appears almost immediately after the application is started, because it is displayed by native hosting code and rendered in HTML.

Außerdem wird durch eine verbesserte Parallelität der ClickOnceClickOnce-Downloadsequenz die Startzeit um bis zu zehn Prozent verbessert.In addition, improved concurrency of the ClickOnceClickOnce download sequence improves the start time by up to ten percent. Nachdem ClickOnceClickOnce Manifeste heruntergeladen und überprüft hat, beginnt der Anwendungsdownload und die Statusanzeige wird aktualisiert.After ClickOnceClickOnce downloads and validates manifests, the application download starts, and the progress bar starts to update.

Siehe auchSee Also

Vorgehensweise: Konfigurieren von Visual Studio 2005 zum Debuggen einer XAML-Browseranwendung, um einen Webdienst aufzurufenConfigure Visual Studio to Debug a XAML Browser Application to Call a Web Service
Bereitstellen von WPF-AnwendungenDeploying a WPF Application