Erstellen von Out-of-Browser-Anwendungen

Wie erkennt man das eine Anwendung Out-Of-Browser (OOB) verwendet werden kann?

image_thumb

Diese Anwendung ist nicht für OOB konfiguriert. Im Kontextmenü ist kein Menü zum Installieren vorhanden.

image_thumb2

Diese hingegen schon. Damit man dieses Menü zum Installieren auf dem Desktop erhält, muss man das Manifest der Anwendung anpassen.

image_thumb6

Das geht sehr einfach über die Eigenschaften des Projektes. Dort gibt es die Option “Enable running application out of browser”. Hat man diese aktiviert, kann man über den Button “Out-of-Browser Settings …” seine OOB-Anwendung detailliert konfigurieren.

image_thumb10

Neben Titel, Beschreibung und Namen für Verknüpfung auf dem Desktop, kann man dort auch Icons konfigurieren die je nach Symbol-Größe auf dem Desktop angezeigt werden.

Anschließend kann man seine Anwendung starten und mittels des Kontext-Menüs installieren und auch darüber wieder deinstallieren.

Installation im Code starten

Den Vorgang des Installierens kann man im Programmcode anstoßen. Dieses muss allerdings auch Sicherheitsgründen in einem Ereignis geschehen, das vom Benutzer ausgelöst wurde, z.B. Button-Click.

    1: void _installOutOfBrowserButton_Click(object sender, RoutedEventArgs e)
    2: {
    3:     if (App.Current.InstallState != InstallState.Installing
    4:         && App.Current.InstallState != InstallState.Installed)
    5:     {
    6:         App.Current.Install();
    7:     }
    8: }

In diesem kleinen Code-Snippet wird auch noch geprüft, ob die Installation bereits angestossen wurde oder ob die Anwendung bereits installiert ist. Treffen diese beiden Eigenschaften nicht zu, wird die Installation gestartet.

Erkennen wo die Anwendung ausgeführt wird

Wie kann man nun erkennen ob die Anwendung im OOB-Modus oder im Browser ausgeführt wird?

    1: private void CheckExecutionState()
    2: {
    3:     if (App.Current.IsRunningOutOfBrowser)
    4:     {
    5:         _oobStatusText.Text = "Out of Browser";
    6:     }
    7:     else
    8:     {
    9:         _oobStatusText.Text = "Running in Browser";
   10:     }
   11: }

Die Eigenschaft App.Current.IsRunningOutOfBrowser gibt an ob die Anwendung außerhalb des Browsers ausgeführt wird oder nicht. Leichter geht es wohl nicht.

Automatische Updates

Ich habe meine Anwendung Out of Browser auf dem Desktop installiert. Wie kann ich erkennen ob es eine neue Version auf der Webseite gibt, von der die Anwendung ursprünglich gekommen ist?

    1: void _checkForUpdateButton_Click(object sender, RoutedEventArgs e)
    2: {
    3:     _versionStatusText.Text = "Checking for update ...";
    4:     App.Current.CheckAndDownloadUpdateCompleted += 
    5:         Current_CheckAndDownloadUpdateCompleted;
    6:     App.Current.CheckAndDownloadUpdateAsync();
    7: }
    8:  
    9: void Current_CheckAndDownloadUpdateCompleted(object sender, 
   10:     CheckAndDownloadUpdateCompletedEventArgs e)
   11: {
   12:     App.Current.CheckAndDownloadUpdateCompleted -= 
   13:         Current_CheckAndDownloadUpdateCompleted;
   14:  
   15:     if (e.UpdateAvailable)
   16:     {
   17:         _versionStatusText.Text
   18:             = "New version is available and installed. " +
   19:             "Please restart your application.";
   20:     }
   21:     else
   22:     {
   23:         _versionStatusText.Text
   24:             = "No Update available.";
   25:     }
   26: }

Die statische Methode App.Current.CheckAndDownloadUpdateAsync() prüft ob es eine neuere Version der installierten Anwendung an ihrem Ursprungsort gibt. Ist dies der Fall wird diese heruntergeladen und installiert. Allerdings wird aus Sicherheitsgründen die Anwendung nicht automatisch beendet und neu gestartet. Es könnte ja sein, das der Anwender noch Daten speichern muss.

Diese Update-Methode wird asynchron ausgeführt und bringt daher auch direkt einen Callback-Handler CheckAndDownloadUpdateCompleted mit, diese enthält Informationen darüber ob ein Update verfügbar ist.

Link: Sourcecode