Une des grandes nouveautés de Silverlight 3 est de permettre à l’application Silverlight d’être lancé en mode Offline.
En effet, avec Silverlight 3, il suffit d’un clic droit pour installer l’application en local :

Comme vous pouvez le voir, par défaut, cette option n’est pas disponible.
Alors jetons un coup d’œil coté dev.
Avant de commencer, pour information, il est possible de télécharger le document au format CHM ici.
Configuration du fichier AppManifest.xml
Par défaut, le fichier AppManifest.xml ressemble à ceci :
1 2 3 4 5 6 7 8 9 10 11 12 13 | <!-- Uncomment the markup and update the fields below to make your application offline enabled <Deployment.ApplicationIdentity> <ApplicationIdentity ShortName="Out of Browser Silverlight Application" Title="Window Title of Your Silverlight Application"> <ApplicationIdentity.Blurb>Description of your Silverlight application</ApplicationIdentity.Blurb> </ApplicationIdentity> </Deployment.ApplicationIdentity> --> |
Et comme d’habitude Microsoft, fait bien les choses, il suffit de decommenter les lignes et modifier à votre guises les différentes propriétés de la classe ApplicationIdentity pour que le mode Offline soit disponible.
Les différentes propriétés de la classe ApplicationIdentity sont :
- ShortName : Doit contenir le nom de votre application
- Blurb : Doit contenir une courte description de votre application
- Title : Est le titre de la fenêtre qui hébergera votre application (Qui est utilisé dans le pop-up d’installation au lieu du nom, WTF ?)
- Icons : Représente une collection d’icones qui seront utilisé pour votre application
Hop la !
Installation de l’application en mode Offline

Ensuite…

Et voila, l’application est installée ! Pas super dur, hein…
Un ou plusieurs raccourcis sont créez en fonction de votre choix.
Voici la superbe icône par défaut :
![]()
A première vue, notre raccourci pointe sur un exécutable nommé sllauncher.exe avec comme argument localhost.0.
"C:\Program Files (x86)\Microsoft Silverlight\3.0.40307.0\sllauncher.exe" localhost.0
En cherchant un peu plus dans notre AppData, on découvre ce dossier :
C:\Users\Username\AppData\LocalLow\Microsoft\Silverlight\Offline\localhost.0
En voici, le contenu :
Voila où se trouve notre fichier .xap accompagné d’autres fichiers :
- index.html : En regardant son contenu, on comprend vite que ce fichier est utilisé par sllauncher.exe et que ce dernier n’exploite pas directement le fichier .xap. Une question a se posé, sera t il possible à l’avenir de spécifier son propre fichier .html qui hébergera notre .xap, pour par exemple spécifié des arguments ? Je pense oui sinon ils auraient inclut un modèle type directement dans l’exécutable sllauncher.exe.
- metadata : Ce fichier contient diverses informations tel que le nom, le titre, la description de votre application, un path pointant sur l’index.html, le domaine source, ici localhost (Utilisé pour vérifier les requêtes cross-domains ?) enfin l’Uri originel qui permettra à Silverlight de retrouver les mises à jour (Quoi ? des mises à jour ? … J’en parle après)
Voila l’installation en mode offline d’une application Silverlight 3 n’a plus de secrets vous !
Gestion du mode online/offline coté code
Pour en revenir à l’installation, il est aussi possible de le déclencher par le code au lieu de laisser l’utilisateur faire un bouton droit…
Il suffit d’appeler
Application.Current.Detach(); |
Pour une question de sécurité, il est possible d’application cette méthode dans un Event Handler déclenché par l’utilisateur.
Deux autres petites choses à savoir :
Pour tester la connectivité réseau, il suffit de tester la valeur de retour de la méthode suivante :
NetworkInterface.GetIsNetworkAvailable() |
L’événement NetworkChange.NetworkAddressChanged est déclenché lorsque la connectivité change.
Deuxième chose:
Pour tester si l’application à été lancé en mode Offline, il suffit de tester la propriété suivante :
Application.Current.RunningOffline |
ou
Application.Current.ExecutionState |
qui donne plus de détails comme nous allons voir juste après.
Gestion des mises à jour avec une application Offline
Lorsque l’application est lancée en mode Offline et qu’une connectivité réseau est disponible alors avec une simple requete HTTP, il regarde si le fichier .xap disponible à l’Uri originel (celui dans le fichier métadata, vous voyez je vous en ai reparlé !) à été modifié.
En cas de modification, l’ExecutionState de l’application est assigné à la valeur DetachedUpdatesAvailable.
1 2 3 4 5 6 7 8 9 10 | ExecutionStateChanged += new EventHandler(App_ExecutionStateChanged); void App_ExecutionStateChanged(object sender, EventArgs e) { if(this.ExecutionState == ExecutionStates.DetachedUpdatesAvailable) { MessageBox.Show("Une mise à jour est disponible. Elle sera installée au prochain lancement de l'application !"); } } |
Il est spécifié dans le SDK qu’il est possible pour un utilisateur de désactiver la mise à jour automatique :
Users can prevent automatic updates by using one of the following techniques:
- On Windows, use the registry editor to add a REG_DWORD as follows:
- Path: HKCU\Software\Microsoft\Silverlight
- Name: Offline_UpdateEnabled
- Value: 0×00000001
- On the Macintosh, specify an OfflineUpdatesEnabled value of No in the ~/Library/Preferences/com.microsoft.silverlight.plist file.
Désinstallation de l’application
Pour désinstaller l’application, la seul manière de le faire c’est avec le bouton droit, il n’est pas (encore ?) possible de le déclencher par le code.
Voila, voila je pense qu’on à fait le tour du sujet
A noté que le mode Offline, fait beaucoup penser aux applications sur la version CTP de Live Mesh.
Les sources qui m’ont servi pour l’article :
http://www.c0ding.fr/repository/.net/Silverlight/Silverlight3Offline.rar




Merci de ton article clair et documenté.