Créer une installation automatique

Lors du déploiement de logiciels sur un grand nombre de machines, ou de l’installation fréquente d’un logiciel, on perd un temps précieux à renseigner les processus d’installation. Les paramètres sont souvent les mêmes d’une configuration à une autre, et peu de programmes sont prévus pour une installation automatique (ou installation silencieuse). Un minimum de préparation permet d’installer à peu près n’importe quel logiciel sans aucune intervention humaine.

Qu’est-ce que Windows Script Host ?

WSH est un composant intégré à Windows depuis Internet Explorer 5. Il permet d’accéder à certaines fonctions du système depuis un script en VB Script ou JavaScript. Il permet notamment l’utilisation de l’objet WshShell, qui nous intéresse plus particulièrement ici. En effet, cet objet permet d’envoyer des frappes clavier, d’accéder à la base de registre ou d’exécuter des commandes externes. Tout ce dont on a besoin pour installer un logiciel de façon entièrement automatique.

Ce système s’applique aussi à la configuration par défaut de Windows. Par exemple, sur toute machine que j’installe, je supprime le fond d’écran, j’affiche sur le bureau les icônes « Poste de travail » et « Mes documents », je désactive le nettoyage du bureau, je désactive la barre de langue, j’active la barre de lancement rapide, je désactive le masquage automatique des icônes de la barre des tâches, je mets google en page d’accueil par défaut, etc, etc. C’est long, répétitif, et surtout c’est la même chose sur toute machine nouvellement installée.

Comment créer un script d’installation silencieuse ?

Prenons l’exemple d’un logiciel que j’installe souvent sur les machines que j’entretiens. Open Office est une suite bureautique open source, donc gratuite, qui n’a rien à envier à Microsoft Office. Elle est compatible avec les fichiers Microsoft Office, leurs interfaces sont assez semblables et elle gère en plus le format PDF ! Pour information, à l’heure où j’écris ces lignes, la société Peugeot vient de passer 20 000 des ses postes informatiques sous Linux et Open Office. De plus, contrairement à Microsoft Office, Open Office est disponible pour systèmes Windows, MacOS et Linux.

Open Office est téléchargeable en Français à l’adresse suivante : http://fr.openoffice.org/about-downloads.html

Open Office est compressé. Afin de gagner du temps lors du déploiement, nous allons éxécuter une première fois le fichier téléchargé, ce qui créera un dossier contenant une verions décompressée du logiciel. Une fois arrivé à l’écran « Installation Wizard », on annule l’opération.

Vous devrez lancer le processus d’installation une première fois afin de l’analyser, entièrement au clavier car WSH ne sait pas simuler des clics de souris, et noter chaque touche que vous aurrez frappé, en insérant des temps de pause entre chaque écran afin de laisser le temps à Windows de digérer ce que vous lui aurrez indiqué.

Un script WSH s’édite à partir de n’importe quel éditeur texte. Lançons le bloc-notes, disponible sur toute installation Windows et sauvegardons ce fichier, par exemple sous le nom « oofr.vbs ».

Dim WshShell
Set WshShell = Wscript.CreateObject("WScript.Shell")

Ces deux lignes initialisent l’objet WSH. On remarque que le dossier décompréssé d’Open Office contient un « setup.exe » c’est donc par lui que nous commenceront :

Return = WshShell.Run("""OpenOffice.org 2.2 Installation Files/setup.exe""", 1, false)

Remarquez les triples guillemets afin d’isoler les noms de dossier à espaces. N’hésitez pas à consulter le guide de référence pour comprendre les paramètres de la méthode run. Ici on ne souhaite pas cacher sa fenetre et on n’attend pas la fin de l’éxécution du programme puisqu’on a l’intention de lui envoyer des frappes clavier pendant son éxécution.

WScript.Sleep 10000
WshShell.AppActivate "OpenOffice.org 2.2"

On laisse un peu de temps à Windows pour digérer setup.exe et analyser l’espace disque disponible (10000 millisecondes, soit 10 secondes) puis on demande l’activation de la fenêtre nommée « OpenOffice.org 2.2 » pour être bien sur de parler à la bonne application. Le premier écran ne sert à rien (comme souvent d’ailleurs), et le “n” souligné du bouton “suivant” nous indique que pour activer ce bouton sans la souris nous devont presser ALT+N :

WshShell.SendKeys("%n") ' Suivant
WScript.Sleep 250

Vient la licence d’utilisation.

WshShell.SendKeys("%j") ' Acceptation de la licence
WshShell.SendKeys("%n") ' Suivant
WScript.Sleep 250

L’écran suivant permet de renseigner le nom de l’utilisateur. Si vous avez correctement installé Windows il doit être déjà renseigné. Sinon, puisqu’il est sélectionné par défaut vous pouvez l’indiquer à la volée :

WshShell.SendKeys("Jean Dupont{TAB}World Company") ' Nom d'utilisateur et société

En pressant la touche ALT, on révèle les raccourcis claviers. Ainsi ALT+T permettra d’installer le logiciel pour tous les utilisateurs de la machine :

WshShell.SendKeys("%t") ' tous les utilisateurs
WshShell.SendKeys("%n") ' Suivant
WScript.Sleep 250

La page suivante demande le type d’installation, nous enverrons donc ALT+N pour l’installation standard et ALT+N encore pour la page suivante :

WshShell.SendKeys("%n") ' installation standard
WshShell.SendKeys("%n") ' Suivant
WScript.Sleep 250

WshShell.SendKeys("%n") ' Association des types de fichier, suivant
WScript.Sleep 250

WshShell.SendKeys("%i") ' page de confirmation, installer
WScript.Sleep 30000

WshShell.SendKeys("%t") ' le programme est installé, terminé

Évaluez le temps d’éxécution de chaque page, avec un minimum de 250 millisecondes si cela vous parrait instantanné. Lorsqu’un certain temps s’écoule, ajoutez toujours quelques secondes de marge pour les systèmes plus lents.

Lorsque j’installe une machine, je fournis systématiquement un certain nombre de logiciels gratuits (Open Office comme suite bureautique, Avast Antivirus, VLC Media Player, 7zip pour la gestion des archives, Acrobat Reader) ça prend du temps, pendant lequel vous devez suivre ce qui se passe à l’écran, cliquer 20 fois sur des boutons “suivant”, etc. C’est vite rasant, surtout 10 fois par jour. Avec ce système, pas forcément plus rapide vu les délais “standardisés”, vous êtez au moins libre de faire autre chose pendant que la machine se termine tranquilement, dans son coin.

Comment pré-configurer une machine avec WSH ?

Comme je le marquais plus haut, je pré-configure certains aspects du système lorsque j’installe une nouvelle machine. Voici un script qui pourra faire cela à votre place, tout aussi efficacement. Le but de l’opération est ici d’activer les icones “poste de travail” et “mes documents” sur le bureau.

Je souhaite éxecuter le panneau de configuration afin de paramétrer le bureau. Les panneaux de configuration sont des fichier .cpl, exécutés par rundll32.exe. Après un rapide coup d’oeuil je constate que celui qui m’intéresse se nomme “desk.cpl”. C’est donc lui que je dois lancer. Une fois le panneau de configuration ouvert, je souhaite retirer l’image de fond d’écran, cliquer sur le bouton “Personnalisation du bureau”, activer les cases “Mes documents” et “Poste de travail”, désactiver la case de l’assistant nettoyage, et enfin valider les deux fenêtres ouvertes.

Le principe est le même que pour une installation, on crée un fichier .vbs avec le bloc note que l’on va appeler par exemple “config.vbs” :

' Initialisation
Dim WshShell
Set WshShell = Wscript.CreateObject("WScript.Shell")

' Execution du panneau de configuration Affichage.
Return = WshShell.Run("rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0", 1, false)

WScript.Sleep 500
WshShell.AppActivate "Propriétés de Affichage"

WshShell.SendKeys("%m") ' Fond d'écran
WshShell.SendKeys("{HOME}") ' Aucun

WshShell.SendKeys("%e") ' personnalisation du bureau
WScript.Sleep 250

WshShell.SendKeys("%m") ' activer l'icone mes documents
WshShell.SendKeys("%o") ' activer l'icone poste de travail
WshShell.SendKeys("%x") ' désactiver l'assistant nettoyage du bureau
WScript.Sleep 250

WshShell.SendKeys("{ENTER}") ' valider le formulaire
WScript.Sleep 250

WshShell.SendKeys("{ENTER}") ' valider le formulaire

La plupart des options de configuration peuvent aussi plus rapidement êtres mises à jour via la base de registre. Mais ce n’est pas à la portée de tout le monde et si vous n’aimez pas prendre de risques bêtes et inutiles, je vous conseille cette façon de faire. Le cas échéant, vous pouvez modifier la base de registre avec une commande du type :

WshShell.RegWrite(clé, valeur [,type])

Si vous n’avez qu’une clé de registre à modifier, ou :

WshShell.Run("regedit /s reglages.reg")

pour en modifier plusieurs en chargeant un fichier de registre.

Mise au propre

Lorsque je veux peaufiner, j’utilise WinRAR et sa capacité à créer des fichiers autoextractibles avec icône personnalisée et éxecution automatique après extraction. S’il est installé sur votre machine, dans l’explorateur Windows, sélectionnez les fichiers d’installation et votre script. Cliquez avec le bouton droit de la souris et choisissez l’option de WinRAR “Ajouter à l’archive …” Réglez les options comme bon vous semble, et cochez la case “Créer une archive SFX”. Dans l’onglet avancé, cliquez sur le bouton “Options SFX”. C’est ici que vous indiquerez le nom de votre fichier VBS à éxecuter après extraction et l’icone que vous souhaitez attribuer à votre paquetage.

Référence WSH (en anglais) : http://msdn2.microsoft.com/en-us/library/98591fh7.aspx