La plupart des logiciels que vous téléchargez ou achetez intègrent une installation. L'installation copie et/ou modifie des fichiers, écrit des clés de registres, définit des configurations, crée des raccourcis, etc. Tout ceci est fait automatiquement pour l'utilisateur. Tout ce que l'utilisateur a besoin de faire est de fournir quelques informations et l'installation fait le reste. L'utilisateur arrive sur un wizard, fait les choix appropriés et n'a plus qu' à attendre que l'installation finisse. Une fois que l'installation a fini sa tâche l'utilisateur n'a plus qu'a lancer son programme. L'utilisateur n'a pas à se soucier des instructions qu'il pourrait avoir oubliées car les étapes essentielles seront exécutées par l'installation.
NSIS est un outil destiné aux développeurs pour créer de tels installations. NSIS permet de créer tout ce qui est possible depuis l'installation basique qui copiera simplement des fichiers, à la plus avancée qui saura écrire des clés de registres, définir des variables d'environnements, télécharger les dernières versions de fichiers depuis Internet, customiser les fichiers de configurations, et plus encore. NSIS est très flexible et son langage de script est facile à apprendre.
NSIS compile tous les fichiers et le script d' installation dans un seul fichier exécutable, ainsi votre application est facilement distribuable. NSIS ajoute seulement 34 Ko de son propre code (avec la configuration par défaut) aux données. NSIS dispose de la plus petite charge possible malgré un large panel d'option grâce à son language de script puissant et son support des plug-ins externes.
Pour créer une installation NSIS, vous devez tout d'abord écrire un script NSIS. Un script NSIS est un simple fichier texte avec une syntaxe spéciale. Vous pouvez éditer un script avec n'importe quel éditeur de texte. Il est recommandé d'utiliser un éditeur qui indique le nombre de ligne car NSIS se sert du numéro de ligne pour indiquer où se situe une erreur, et où il pourrait s'en produire. Un éditeur qui supporte le surlignement de texte est aussi recommandé. Vous pouvez télécharger des éditeurs spécialement conçus pour NSIS et des fichiers pour le surlignement de syntaxe à partir des Archives de NSIS.
Dans un script NSIS chaque ligne est traitée comme une commande. Si votre commande est trop longue pour être sur une ligne vous pouvez utiliser l'anti-slash - '\' - à la fin de celle-ci. Le compilateur traitera la nouvelle ligne comme étant la suite de la précédente et n'attendra pas de nouvelle commande. Par exemple:
Messagebox MB_OK|MB_ICONINFORMATION \ "Ceci est une exemple d'utilisation de saut de ligne pour une longue commande dans un script NSIS"
Si vous voulez utiliser la double-quote dans une chaîne vous pouvez soit utiliser \$" pour en faire un caractère soit mettre entre guillemets la chaîne avec différentes sortes de caractères d'échappement tel que ` ou '.
Pour plus de détails sur le format des fichiers de script, voir Format des fichiers de script.
L'extension par défaut pour le fichier de script est .nsi. Les fichiers d'en-têtes ont l'extension .nsh. Les fichiers d'en-têtes peuvent vous aidez à organiser votre script en le divisant en plus d'un unique bloc de code, vous pouvez aussi y mettre des fonctions ou des macros et inclure les fichiers d'en-têtes dans d'autres installations. La maintenance en est ainsi simplifiée et votre script sera plus facile à lire. Pour inclure un fichier d'en-têtes dans votre script utiliser !include. Les fichiers d'en-têtes se situent dans le répertoire Include de votre répertoire NSIS et peuvent être inclus simplement par leur nom. Par exemple:
!include Sections.nsh
Un script NSIS peut contenir des Attributs d'Installation et des Sections/Fonctions. Vous pouvez également utiliser les Commandes de Compilation pour des opérations de compilation conditionnelle. La structure minimale d'un script est OutFile, qui indique à NSIS où écrire l'installation, ainsi qu'une section.
Les Attributs de l'Installation déterminent le comportement et l'apparence de votre installation. Avec ces attributs vous pouvez définir quelles pages seront montrées et dans quel ordre, les textes qui seront affichés durant l'installation, le nombre de types d'installation. La plupart de ces commandes peuvent uniquement être initialisées et ne sont pas changeables durant l'exécution.
Les attributs les plus basiques sont Name, InstallDir et DirText.
Pour plus d'information sur les attributs d'installations, regarder Attributs d'Installation.
Dans une installation commune il y a plusieurs choses que l'utilisateur peut installer. Par exemple, dans la distribution de l'installation NSIS, vous pouvez choisir d'installer le code source, des plug-ins supplémentaires, des exemples, ainsi que d'autres composants. Chacun d'eux a sa propre part de code. Si l'utilisateur choisit d'installer ces composants, alors l'installation exécutera ce code. Dans le script, ce code se trouve dans les sections. Chaque section est un composant que peut sélectionner l'utilisateur. Nous ne discuterons pas des sections invisibles dans ce tutoriel. Il est possible de construire votre installation avec une seule section, mais si vous voulez utiliser la page de sélection des composants et laisser l'utilisateur choisir ce qu'il veut installer, vous aurez besoin de plus d'une section.
Les instructions qui peuvent être utilisées dans les sections sont très différentes des instructions des attributs d'installations, elles s'exécutent sur l'ordinateur de l'utilisateur. Ces instructions peuvent extraire des fichiers, lire et écrire dans les registres, des fichiers INI ou des fichiers normaux, créer des répertoires, créer des raccourcis et plus encore. Vous pouvez en savoir plus dans le chapitre Instructions.
Les instructions de bases sont SetOutPath qui indique à l'installation où extraire les fichiers et File qui extrait les fichiers.
Exemple:
Section "Mon Programme" SetOutPath $INSTDIR File "Mon Programme.exe" File "Readme.txt" SectionEnd
Pour plus d'informations sur les sections voir Sections.
Les fonctions, comme les sections, peuvent contenir du code. La différence entre les sections et les fonctions est la manière dont elles sont invoquées. Il y a deux types de fonctions, les fonctions utilisateur et les fonctions d'interaction.
Les fonctions utilisateur sont appelées par l'utilisateur depuis les sections ou d'autres fonctions utilisant l'instruction Call. Les fonctions ne seront exécutées que lorsqu'elle seront appellées. Une fois le code de la fonction exécuté l'installation continuera d'exécuter les instructions qui succède à l'instruction Call, à moins que vous n'abortiez l'installation depuis la fonction. Les foncitons utilisateurs sont très utiles si vous disposez d'un jeu d'instructions qui a besoin d'être déclenché à différents moments de l'installation. Si vous mettez le code dans des fonctions vous pouvez améliorer le temps d'installation et ainsi maintenir le code plus facilement.
Les fonctions d'interaction sont appelées par l'installation une fois qu'un évenement pré-défini se produit comme quand l'installation se lance. Les fonctions d'interaction sont optionnelles. Si par exemple vous voulez accueillir l'utilisateur avec votre installation vous définirez une fonction appelée .onInit. Le compilateur NSIS reconnaîtra cette fonction en tant que fonction d'interaction grâce à son nom et l'appellera quand l'installation se lancera.
Function .onInit MessageBox MB_YESNO "Ceci va installer Mon Programme. Voulez-vous continuer ?" IDYES gogogo Abort gogogo: FunctionEnd
Abort a un sens spécial dans les fonctions d'interaction. Chaque fonction d'interaction en défini un sens propre, regardez les Fonctions d'interaction pour plus d'information. Dans l'exemple ci-dessus Abort demande à l'installation d'arrêter l'initialisation de l'installation et sort immédiatement.
Pour plus d'informations voir Les Fonctions.
NSIS offre 20 Variables qui peuvent être utilisées dans n'importe quelle Section ou Fonction. En plus il y a une Pile, qui peut aussi servir de stockage temporaire. Pour accéder à la pile utilisez les commandes Push et Pop. Push ajoute une valeur à la pile, Pop en enlève une et fixe la variable. Par exemple, la valeur de $0 est 123.
Maitenant vous allez invoquer la fonction bla:
Function bla Push $0 ;123 ajouté à la pile ...la fonction peut manipuler $0... Pop $0 ;Enlève 123 de la pile et (re-)fixe $0 à 123 FunctionEnd
Après avoir appelé la fonction, la variable contient la même valeur qu'avant. Notez l'ordre quand vous manipulez de multiples variables (last-in first-out):
Function bla Push $0 Push $1 ...code... Pop $1 Pop $0 FunctionEnd
Plus vous travaillerez avec NSIS plus vos scripts deviendront complexe. Le risque de faire des erreurs est alors accru, particulièrement lorsque vous manipuler des variables. Il y a peu de possibilités pour vous aider à debugguer votre code. Pour afficher le contenu des variables vous devrez utilisez les MessageBoxes ou DetailPrint. Pour avoir un bref aperçu de toutes les variables vous devrez utiliser le plug-in Dumpstate. Par défaut, toutes les actions de l'Installation sont affichées sur la fenêtre de journalisation. Vous pouvez accéder au log si vous cliquez-droit sur la fenêtre de journalisation et sélectionner "Copier les détails dans le presse papier". Il y a aussi la possibilité d'écrire directement dans un fichier. Voir ici. Très utile si vous forcez l'installation à se fermer tout seul utilisant SetAutoClose.
Les commandes de compilation seront exécutée au moment de la compilation sur votre ordinateur. Elles peuvent utilisées pour faire de la compilation conditionnelle, pour inclure des fichiers, pour exécuter des applications, pour changer de répertoire en cours de travail et plus. L'usage le plus commun est le define. Les Defines sont des constantes de compilation à la volée. Vous pouvez définier le numéro de version de votre produit et l'utiliser dans le script. Par exemple:
!define VERSION "1.0.3" Name "Mon Programme ${VERSION}" OutFile "Mon Programme d'Installation - ${VERSION}.exe"
Pour plus d'information sur les defines voir Compilation Conditionnelle.
Une autre utilisation commune sont les macros. Les macros sont utilisées pour rajouter du code au moment de la compilation, dépendant des defines et utilisant donc les valeurs de ces defines. Un exemple de macro est UpgradeDLL, qui vous permet de mettre à jour un fichier DLL. Les commandes de macros sont insérées au moment de la compilation. Cela vopus permet d'écrire du code une seule fois et de les utiliser de nombreuses fois avec des changements mineurs. Par exemple:
!macro MyFunc UN Function ${UN}MyFunc Call ${UN}DoRegStuff ReadRegStr $0 HKLM Software\MyProgram key DetailPrint $0 FunctionEnd !insertmacro MyFunc "" !insertmacro MyFunc "un."
Cette macro vous évite d'écrire le même code pour l'installation et le désinstallation. Les deux !insertmacros insèrent deux fonctions, une pour l'installation appelé MyFunc et une pour la désinstallation appelé un.MyFunc et les deux font exactement la même chose.
Pour plus d'information voir les commandes de compilation à la volée.
La deuxième chose dont vous avez besoin pour créer un installation près en avoir créer le script est de le compiler. MakeNSIS.exe est le compilateur NSIS. Il lit votre script, le parse et crée l'installation pour vous.
Pour compiler faites un clique-droit sur votre fichier .nsi et sélectionner Compiler le script ou Compiler le script (avec la compression bz2). Cela provoquera le lancement MakeNSISw et l'appel MakeNSIS pour compiler votre script. MakeNSISw redirigera la sortie de MakeNSIS et vous la présentera dans une fenêtre où vous pourrez la voir, la copier, tester l'installation, le parcourir et plus. Si vous ne voyez pas l'entrée Compiler le script dans le menu contextuel (clique-droit) c'est que vous avez probablement déselectionner les Extensions Système durant l'installation de NSIS. Vous pouvez sinon utiliser MakeNSIS.exe via un prompt DOS ou réinstaller NSIS avec les Extensions Système sélectionnées.
Le compilateur vérifiera votre script et vous indiquera les avertissement ou les erreurs. Si une erreur se produit (i.e. 2 paramètres requis mais une seul fourni) le compilateur abortera et un court message d'erreur indiquant le numéro de ligne sera affiché. Pour les erreurs non-critique le compilateur donnera un avertisssement (i.e. deux commandes DirText dans un script). Si votre script ne comporte pas d'erreurs le compilateur vous créera l'installation que vous n'aurez plus qu'à distribuer.
NSIS supports different compression methods zlib and bzip2. zlib is fast and is very efficient in resources consumption. bzip2 usually gives better results for large installers, but requires a bit more memory and is a little slower. To set the compressor use SetCompressor.
Les scripts NSIS supportent l'appels de plug-ins. Les plug-ins sont des ficheirs DLL écrits en C, C++, Delphi ou tout autre langage de programmation. Les Plug-ins fournissent une base de code plus puissante à NSIS puisqu'ils peuvent contenir n'importe quel code depuis celui qui fait le calcul de 1 + 1 à celui qui communique avec d'autres ordinateurs via FireWire.
Pour appeler une fonction plug-in dans votre script vous devez ajouter une ligne comme suit:
NomDLL::NomFonction "parametre numero 1" "parametre numero 2" "parametre numero 3"
Chaque fonction de plug-in a ses propres exigences lorsqu'il arrive le moment de traiter les paramètres, certains n'en auront pas besoin, d'autres en accepterons autant que nécessaire. Par exemple:
nsExec::ExecToLog '"${NSISDIR}\makensis.exe" /CMDHELP' InstallOptions::dialog "$PLUGINSDIR\test.ini" NSISdl::download http://download.nullsoft.com/winamp/client/winamp281_lite.exe $2
Les plug-ins que NSIS reconnaît sont listés au début de la sortie du compilateur. NSIS recherche les plug-ins dans le répertoire Plugins sous votre répertoire NSIS et en liste toutes les fonctions disponibles. Vous pouvez utiliser !addPluginDir pour dire à NSIS de chercher aussi dans d'autres répertoires.
Il y a plusieurs plug-ins fournis avec votre distribution NSIS. InstallOptions est un plug-in populaire qui vous permet de rajouter des pages personnalisées à votre installation, combiné avec vos commandes de Pages NSIS (voir Pages). Le plug-in Startmenu fournit une page qui permet à l'utilisateur de choisir un dossier de Démarrage. Il y a un grand choix de plug-ins pour différents objectifs, regardez le répertoire Contrib pour les fichiers d'aide et d'exemples. Vous pouvez trouver des plug-ins additionnels en ligne dans les Archives NSIS.
Vous pouvez aussi créer vos propres plug-ins si vous savez programmer. ExDLL est l'exemple basique de plug-in. Comme tous les plug-ins qui accompagnent NSIS et la plupart des plug-ins dans les archives sont fournis avec leur code source vous pouvez regarder le répertoire Contrib et les Archives NSIS en lignes pour plus d'exemple.
Vous pouvez aussi personnaliser les ressources des interfaces sans en modifier ou recompiler les sources. Utilisez un éditeur de ressources pour customiser l'un des fichiers UI et utiliser la commande ChangeUI pour vous servir des ressources personnalisées.
Une interface utilisateur populaire pour NSIS est l'Interface Utilisateur Morderne (Modern User Interface), avec des assistants comme pour les dernières versions de Windows. L'UI moderne n'est pas seulement un fichier de ressources personnalisées, il dispose d'un lot de nouveaux éléments pour l'interface. Il introduit un en-tête blanc pour décrire l'étape en cours, une zone de description sur la page de composant, une page de Fin qui permet de lancer l'application ou de rebooter le système et plus. Les fichiers de langage de Modern UI lui permetten de créer facilement une Installation multi-langues, car ils contiennent une traduction pour chaque label de l'installation.
Modern UI dispose d'un système de macro qui permet d'insérer du code de prendre la main sur chaque nouveaux éléments de l'UI, vous n'avez donc qu'à ajouter quelques lignes de code pour vous en servir. Pour plus d'informations, parcourez Lisez-moi Modern UI et les Exemples de Modern UI.