Pourquoi la création d’un programme d’installation est si peu évidente ?

Généralement, quand je parle de créer un programme d’installation, je vois les développeurs se déliter. Il s’agit le plus souvent d’un problème de méconnaissance du sujet. Si par chance un développeur a déjà travaillé sur ce genre de projet, la conversation tourne très rapidement autour des outils, de leur coût, et de leur complexité d’usage.

L'objectif

Aujourd’hui je souhaiterais donc clarifier ce qui se cache derrière cette fameuse « complexité ». Soyons honnêtes tout de suite, cet article ne finira pas en disant que les choses sont toujours simples. Un scénario d’installation complexe fera certainement appel à des solutions avancées, et potentiellement complexes.

Je m’appète simplement à présenter le sujet qui rend ce genre de projet peu évident : la génération de fichiers MSI.

Même si votre installation utilise un exécutable pour bootstrapper votre déploiement (installer un ensemble de programmes, ou valider des prérequis), il y aura toujours un ou plusieurs MSI derrière.

Petite parenthèse sur le MSIX :

Certains diront peut-être qu’aujourd’hui il y a le MSIX, et qu’il résout tout. Oui, le MSIX est très intéressant. Mais en installez-vous tous les jours dans votre vie personnelle ? Vous avez déjà tenté de voir si vos serveurs supportaient ce format ? Votre infrastructure ? Vos utilisateurs ?

Désolé pour encore quelques années, le MSI sera la norme. Il faut vivre avec, et prendre le temps de savourer ses avantages.

Pourquoi le MSI est-il compliqué ?

L’acronyme MSI signifiant Microsoft System Installer, il cache bien sa véritable nature des fichiers qui portent cette extension.

Si par curiosité, vous regardez les propriétés d’un MSI, vous devriez voir un détail similaire à ceci :

Propriétés d'un fichier MSI, le titre contient "Installation Database"


Pour mon exemple, j’ai volontairement masqué quelques informations. Celles-ci n’avaient pas grand intérêt. À ma grande surprise, le MSI que j’ai utilisé pour l’exemple a été généré à partir de Wix Toolset (mon outil préféré pour la création de MSI).

Mais revenons à nos moutons. Avez-vous remarqué le titre : "Installation Database". Il ne s’agit pas d’une coquetterie, mais de la véritable nature de ce format. Un fichier MSI est une base de données décrivant les composants à installer / désinstaller.

Bien évidemment cette base de données est complexe. Elle est constituée de nombreuses tables décrivant les composants, fichiers, actions standard ou personnalisées, clés de registres, interfaces utilisateurs, controls, etc.

Un MSI n’est donc pas qu’un réceptacle de fichiers.

Ce n’est pas non plus un programme. C’est souvent sur ce point que de nombreux développeurs s’égarent. Le programme qui se charge de votre MSI est le vénérable msiexec. C’est lui qui se charge de lire votre MSI, et d’agir en fonction de son contenu.

Si vous souhaitez procéder au débogage d’une installation, il faut donc commencer par se documenter sur msiexec. Ceci fera l’objet d’un prochain article, je ne détaillerai donc pas d’avantage aujourd’hui. Petit indice tout de même: "/lv" est votre ami.

Si vous avez des difficultés à concevoir un fichier MSI, il est possible que la documentation de vos outils ne vous aide pas beaucoup (InstallShield, Wix Toolset, ou autres). Ou qu’elle vous semble incomplète.

Dans ces moments-là, il est intéressant de se rappeler que le fichier MSI est une base de données. Et que cette base de données est documentée par Microsoft. Il faut alors se tourner vers la page Installer Database Reference de Microsoft Learn. Plus précisément sur la page Database Tables. Celle-ci liste une bonne partie des éléments utilisables (le reste se trouve dans les pages connexes de Microsoft Learn).

Vous devez commencer par identifier ce dont vous avez besoin (exemple : "Class", qui, comme son nom de l’indique pas, sert à l’enregistrement de composants COM). Ensuite, en fonction de l’outil utilisé, il reste à trouver la manière d’enregistrer celui-ci.

C’est à ce moment-là que vous vous rendrez compte que le choix de vos outils est important. Si vos outils intègrent moultes interfaces graphiques, il est possible que ce soit plus compliqué que prévu. Malheureusement, il n’est pas rare qu’une interface censée vous simplifier la vie finisse par vous la compliquer.

C’est pour cela que j’apprécie Wix Toolset. Chaque élément intégrable dans un composant Wix porte le nom de la table à laquelle il se rapporte dans le format MSI. Il n’y a donc pas à chercher très longtemps. Mais c’est aussi pour cela que la documentation de Wix Toolset semble parfois un peu "courte" (pour ne pas dire inexistante à certains moments).

Conclusion

Cet article est volontairement court. Mon objectif était de vous orienter dans la bonne direction, et de vous éviter de longues heures de recherche.

La complexité apparente des MSI cache en fait une très grande richesse qui est peut-être cachée par vos outils. Soyez vigilant lors du choix de vos outils. Celui-ci est crucial.

Jérémy Jeanson

Comments

You have to be logged in to comment this post.