Avec l’arrivée de Windows 10, Microsoft a travaillé son système d’exploitation pour offrir un nouvel écosystème aux développeurs. La promesse est grande, la plateforme universelle Windows doit offrir une expérience commune quelque soit le périphérique (fonction, taille, écran, etc.). En outre, ce modèle doit révolutionner dont les applications sont proposées, déployées, maintenues etc. L’objet de cet article est de traiter de la transformation ou modernisation des applications existantes en applications universelles (APPX) via Desktop Bridge ou Desktop App Converter
Dans les faits, les applications universelles de Windows 10 offrent les bénéfices suivants :
- Elles sont toujours à jour via le système intégré au Microsoft Store et via Windows Update. Si le développeur met à disposition une nouvelle version alors l’application de l’utilisateur est mise à jour sans nécessiter d’actions particulières.
- Réutilisation de l’existant : Les applications universelles offrent des ponts qui permettent de ne pas retravailler l’application en intégralité.
- Protection des données : Les données sont stockées dans un conteneur dédié. Le conteneur contrôle aussi l’accès au matériel et aux données (Microphone, Camera, Emplacement, Contacts, Notifications, etc.)
- Simplification du développement : Microsoft propose un seul développement permettant de cibler tous les périphériques qui exécutent une version de Windows 10. Ceci inclut la partie Desktop, Mobile, Team (Surface Hub), Holographic (Hololens), ou IoT.
- L’expérience utilisateur: Evolution de l’expérience utilisateur de manière à s’intégrer pleinement dans le système d’exploitation et ses fonctions (Cortana, Partage, etc.).
Le principal bénéfice dont nous allons parler ici est la fiabilité liée au mode de packaging et au déploiement des applications universelles. Si on reprend les applications Win32, on retrouve différentes solutions de packaging (MSI, InstallShield, etc.) demandant plus de complexité dans le déploiement de ces applications.
Les applications universelles offrent une solution bien plus robuste de packaging :
- Le système d’exploitation gère l’installation, la mise à jour et la désinstallation
- Les applications sont installées pour les utilisateurs – Adieu les problématiques pour des machines multi utilisateurs multi profils.
- L’état de l’application est géré et sécurisé par le système d’exploitation.
- Toutes les applications sont signées par une autorité de confiance.
- Un versioning formel.
- Tout est présent dans un fichier unique (appx ou appxbundle)
D’un point de vue déploiement, c’est le graal pour tous les administrateurs :
- Une installation et désinstallation totalement propre.
- Des applications toujours à jour (lorsque déployées via le store)
- Aucune élévation de privilèges n’est nécessaire pour installer l’application.
- Un impact réduit sur le système.
- Optimisation de l’espace disque avec une seule instance de fichiers stockées à travers les applications et utilisateurs.
- Des mises à jour différentielles au niveau du block.
- Une protection contre la falsification.
- Le système gère l’application (lancement, mise en pause, reprise, arrêt)
- Chaque application est identifiable avec une identité UWP permettant de la détecter facilement.
En théorie, il faut développer l’application avec le Framework Universal Windows Platform pour bénéficier de tous les avantages cités plus haut. Néanmoins, Microsoft a créé Desktop App Converter (nom de code Centennial) pour convertir des applications Desktop (Win32) existantes.
Pour plus d’informations sur le processus de conversion, vous pouvez lire : Behind the scenes of the Desktop Bridge
Un des bénéfices cible principalement la gestion moderne via Microsoft Intune. Par défaut, Windows 10 ne permet le déploiement que des applications au format MSI (un seul fichier) ou des applications universelles. Avec Desktop App Converter, il devient possible de déployer la majorité des applications bien que le poste ne soit pas géré que de façon moderne (sans Co-Management avec Microsoft Intune).
Notez que Microsoft Intune propose Intune Management Extension permettant d’exécuter des scripts PowerShell et par conséquent d’exécuter l’installation d’applications. Néanmoins, cette solution ne propose pour l’instant pas la gestion de repository de sources et doit être couplée avec des serveurs locaux ou des solutions de gestion de sources (Chocolatey).
Aujourd’hui des milliers d’applications ont déjà été converties et sont proposées au travers du Microsoft Store. C’est par exemple le cas d’Office 365 Personal.
Les prérequis de la conversion sont les suivants :
- L’application doit fonctionner avec le .NET Framework 4.6.1.
- L’application doit pouvoir s’installer de manière silencieuse (sans action d’un utilisateur). Note : Les outils tiers permettent de packager des applications qui ne peuvent être installée de manière silencieuse.
- L’application ne doit pas nécessiter d’élévation de privilèges.
- L’application ne doit pas installer de drivers ou de service.
- L’application ne doit pas utiliser AppData pour communiquer avec d’autres applications.
- L’application ne doit pas écrire dans le répertoire d’installation.
Préparation de la machine de référence
Maintenant que nous avons planté le décor, nous allons pouvoir passer dans le vif du sujet en commençant par préparer une machine de référence. Je vous recommande l’utilisation d’une machine dédiée qui répond aux prérequis suivants :
- Windows 10 1607 (Anniversary Update) ou plus en édition Pro ou Enterprise. Pour bénéficier des dernières avancées, je vous invite à utiliser Windows 10 1709 (Fall Creators Update).
- Un processeur 64-bit (x64)
- Une machine ayant les instructions de virtualisation matériel et supportant la technologie Second Level Address Translation (SLAT)
Récupérez la Windows Software Development Kit (SDK) for Windows 10 et procédez à l’installation :
Passez les différents écrans et validez que l’ensemble des composants sont installés :
Une fois le SDK installé, vous devez télécharger et installer l’application Desktop App Converter depuis le Microsoft Store.
Vous devez ensuite télécharger l’image de base correspondant à la version de Windows 10 que vous utilisez pour Desktop App Converter. Sauvegardez l’image dans un dossier sur votre disque. Par exemple : C:\DesktopAppConverter\Images\
Une fois ces prérequis validés, vous pouvez ouvrir le menu démarrer puis localiser Desktop App Converter. Cliquez droit faire More (Plus) puis Run as administration (Exécuter en tant qu’administrateur). Ceci est primordial pour permettre de réaliser les opérations nécessaires avec l’outil.
Une fois l’outil lancé, vous devez installer l’image téléchargée. Cette opération installera notamment les fonctionnalités Windows dont notamment Containers.
Pour ce faire, exécutez la commande : DesktopAppConverter.exe -Setup -BaseImage <CheminVersLimage>\<Image>.wim
Un redémarrage peut être initié pour activer la fonctionnalité Containers, vous devez alors vous reconnecter. Une fenêtre PowerShell apparaîtra puis disparaîtra une fois l’opération terminée.
Conversion de l’application
Votre environnement est maintenant prêt à convertir/packager des applications. Vous devez donc récupérer les sources des applications que vous souhaitez packager. Dans le cadre de ce billet, j’ai pris l’exemple d’Adobe Reader. Vous devez cibler une application qui doit pouvoir s’installer de manière silencieuse et répondre aux prérequis précédents.
Lancez Desktop App Converter en tant qu’administrateur. Exécutez la commande suivante :
DesktopAppConverter.exe -Installer <CheminVersLapplication> -InstallerArguments "<Arguments>" -Destination <DossierUtiliserPourStockerLePackage> -PackageName "<NomDuPackage>" -PublisherName "CN=<Nom de l’entreprise>" -Version <VersionSur4Digit> -MakeAppx -Sign -Verify
Note : Desktop App Converter ne prend pas en charge Unicode ; ainsi, aucun caractère chinois ou caractères non-ASCII ne peut être utilisé avec l'outil.
Desktop App Converter fait le travail de conversion en spécifiant un certain nombre de validations. Une fois terminé, il a généré le fichier APPX, les fichiers de journalisation et le certificat autosigné utilisé pour signer l’application.
Dans le dossier PackageFiles, vous retrouvez les éléments essentiels du package dont notamment :
- Le fichier AppxManifest.xml déclare les comportements de l’application : Dépendances, Logos, raccourcis, associations de fichiers, exceptions pare-feu, intégration avec l’explorateur de fichiers etc. Pour plus d’informations, je vous invite à lire : Integrate your app with Windows 10 (Desktop Bridge)
- Le fichier Registry.dat contient la ruche avec les informations normalement créées dans la base de registre.
- Le dossier VFS contient le système de fichiers tel qu’il aurait été créé par l’application.
- Le dossier Assets contient les éléments essentiels comme le logo, etc.
Note : Desktop App Converter adopte une approche très conservatrice. Si vous le souhaitez, vous pouvez consulter le dossier VFS et supprimer tous les fichiers dont votre installateur n'a pas besoin. Vous pouvez également consulter le contenu de Registry. dat et supprimer toutes les clés qui ne sont pas installées/nécessaires à l'application. Vous devrez alors regénérer le fichier APPX via la commande MakeAppx.
Considération importante : Comme avec Microsoft Application Virtualization (App-V), vous devez supprimer tous les comportements inclus dans l’application et modifiant sa structure d’installation. Ainsi si l’application inclut un mécanisme de mise à jour automatique (AutoUpdater, etc.), il doit être neutralisé via les arguments d’installation. Dans le cas contraire, cela pose deux problèmes :
- L’application demandera à l’utilisateur d’avoir les droits d’administration pour installer la mise à jour.
- L’application installer/mettra à jour l’application dans le chemin d’installation par défaut. Elle ne mettra donc pas à jour l’application universelle.
Vous devez donc gérer les mises à jour des versions indépendamment en repackageant l’application et en déployant la nouvelle version.
Nous avons vu comment créer une application de manière simplifiée avec un certificat autogénéré. Cette solution n’est clairement pas idéale pour le monde de l’entreprise et doit être substituée à l’une d’elle (par ordre de préférence) :
- Achat d’un certificat de signature de code à une autorité publique (Exemple : Symantec, Digitcert, GlobalSign, etc.). Cette méthode est préférée car l’application est par défaut jugée fiable par le système dès lors que la machine dispose des autorités de certification racines publiques. Elle est donc déployable en l’état après signature.
- Utilisation d’une autorité de certification d’entreprise (Exemple : Active Directory Certificate Services, etc.) pour générer le certificat de signature de code nécessaire. Cette méthode permet de s’affranchir de l’achat du certificat publique. L’application est jugée fiable par le système dès lors que la machine dispose du certificat racine de l’autorité de certification de l’entreprise dans son magasin. Celui-ci peut être déployé par défaut par Active Directory ou Microsoft Intune (en mode moderne).
- Génération d’un certificat autosigné unique utilisé pour signer toutes les applications. Cette méthode doit être considérée en dernier recours. Vous pouvez générer un certificat de signature de code unique qui sera utilisé à chaque fois que vous devez convertir une application. Vous pouvez ensuite le déployer via Active Directory ou Microsoft Intune pour que les applications soient jugées fiables par le système.
Quelle que soit la méthode ci-dessus, nous reviendrons sur la façon permettant de déployer le certificat par Microsoft Intune dans l’article suivant.
Si vous souhaitez partir sur la 3ème méthode, voici comment générer un certificat autosigné avec le SDK de Windows 10 :
- Naviguez dans le répertoire d’installation du SDK : C:\Program Files (x86)\Windows Kits\10\bin\<Version>\x64
- Exécutez la commande : exe /n <Nom de l’organisation> /r /h 0 /eku"1.3.6.1.5.5.7.3.3,1.3.6.1.4.1.311.10.3.13" /e <DateDExpiration> /sv MyKey.pvk MyKey.cer
- Renseignez le mot de passe utilisé.
- Exécutez ensuite la commande pour créer le fichier PFX :
Pvk2Pfx /pvk MyKey.pvk /pi <Mot de Passe précédent> /spc MyKey.cer /pfx MyKey.pfx /po <Mot de Passe pour le PFX>
Une fois votre certificat de signature de code acquis ou généré, vous pouvez maintenant convertir l’application sans la signer avec la ligne de commande :
DesktopAppConverter.exe -Installer <CheminVersLapplication> -InstallerArguments "<Arguments>" -Destination <DossierUtiliserPourStockerLePackage> -PackageName "<NomDuPackage>" -PublisherName "<CN COMPLET du certificat>" -Version <VersionSur4Digit> -MakeAppx -Verify
Note : J’attire votre attention sur le PublisherName qui doit correspondre au nom commun complet du certificat qui sera utilisé pour signer l’application. Par exemple : CN = MicrosoftTouch Company, O = MicrosoftTouch, L = LYON, S = France, C = FR. Si ce n’est pas le cas, la signature échouera avec l’erreur : « Error : SignerSign() failed. " (-2147024885/0x8007000b) "
Outre les paramètres que nous avons vu jusqu’à maintenant, Desktop App Converter propose aussi :
- -InstallerValidExitCodes <Int32> : Permet de spécifier un code de retour spécifique si l’application ne respecte pas les codes de retour de référence.
- -AppFileTypes <String> : Permet de spécifier les extensions de fichiers à associer à l’application.
- -AppDescription <String> : Permet de spécifier la description de l’application.
- -PublishComRegistrations : Analyse tous les enregistrements COM faits par l’installeur et publie ceux qui sont valides dans le fichier Manifest.
Si vous souhaitez packager une application qui n’a pas d’assistant d’installation et qui ne correspond qu’à un exécutable, voici la ligne de commande : DesktopAppConverter.exe -Installer <CheminVersLapplication> -AppExecutable MyApp.exe -Destination <DossierUtiliserPourStockerLePackage> -PackageName "<NomDuPackage>" -PublisherName "<CN COMPLET du certificat>" -Version <VersionSur4Digit> -MakeAppx -Verify
Une fois le fichier APPX généré, vous pouvez le signer avec votre certificat via la procédure suivante :
- Naviguez dans le répertoire d’installation du SDK : C:\Program Files (x86)\Windows Kits\10\bin\<Version>\x64
- Exécutez la commande : exe sign /fd SHA256 /debug /a /f <CheminVersLeCertificat.pfx> <CheminVersL’Application.appx>
Pour en apprendre plus, je vous invite à consulter le blog suivant : http://aka.ms/AppInstaller
On retrouve des solutions payantes :
- InstallShield par flexera
- WiX par FireGiant
- Advanced Installer par caphyon
- InstallAware APPX Builder
- Embacadero RAD, Builder
- Cloudhouse
Vous pouvez maintenant passer au déploiement de cette application convertie.