Apprendre à créer un installeur avec Visual Studio Installer Projects

Ce tutoriel vous permettra de créer un installeur Windows (Setup .msi). avec l’extension à Visual Studio Visual Studio Installer Projects pour une solution (application) crée avec Visual Studio.

Commentez Donner une note  l'article (5)

Article lu   fois.

L'auteur

Profil Pro

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

1. Objectif du tutoriel

L'objectif de ce tutoriel est d'apprendre à créer un Setup (installeur) de projet Visual Studio avec l’extension gratuite Visual Studio Installer Projects.

1-1. Pourquoi ce tutoriel

On trouve de la documentation sur Visual Studio Installer Projects, mais elle concerne souvent des versions plus anciennes assez différentes, essentiellement en anglais. À la création du Setup, quelques points sont un peu déconcertants et pas totalement intuitifs.

1-2. Public ciblé

La cible de ce tutoriel est débutant(e).

1-3. Parti-pris

  • ne sauter aucune étape, quitte à agacer un peu le lecteur expérimenté avec des choses totalement évidentes pour lui ;
  • ne pas vouloir être exhaustif ;
  • ne donner qu’un cheminement (parmi d’autres) pour aboutir.

Dans ce tutoriel des mots comme « solution » « générer » sont employés ; ils ont dans la terminologie Microsoft, un sens particulier. Leur signification est précisée en fin de tutoriel.

Le vocabulaire (terminologie) MicrosoftVocabulaire (terminologie) Microsoft

1-4. Prérequis

Visual Studio installé sur le PC. La version gratuite « Community » est amplement suffisante. De préférence avoir un minimum de pratique des principales commandes et de l’interface utilisateur.

Visual Studio Community 2017 a été utilisé pour ce tutoriel.

2. Le programme pour lequel on va créer un installeur

C’est un utilitaire informatique, Open source en C#, « Path Length Checker » écrit par Daniel Schroeder en c# WPF. Il est disponible sur GitHub. Il permet de lister les chemins de fichiers et répertoires dont la longueur est supérieure à une valeur choisie.

Intérêt : avec des chemins d'accès supérieurs à la valeur que gère Windows (1) (2), il y a des problèmes assez sournois et déconcertants : par exemple une sauvegarde qui échoue, ou, dans l’explorateur de fichiers, la taille d’un répertoire qui peut être fausse (inférieure à celle d’un sous-répertoire qu’il contient !).

  1. Disons moins de 255 caractères. Dans les faits, c’est un peu plus compliqué. Pour les perfectionnistes, des informations supplémentaires sont disponibles sur la toile. En se limitant à des chemins d'accès complets de 240 caractères ça passera à tous les coups.
  2. Les chemins d'accès trop longs viennent souvent d’un fichier téléchargé « dézippé » dans un répertoire déjà profond.

2-1. Pourquoi avoir choisi ce programme

Il est assez caractéristique d’un certain nombre de solutions (cf.Vocabulaire (Terminologie) Microsoft)Vocabulaire (terminologie) Microsoft qu’un débutant utilisera. Il se compose d’un projet console, d’un projet GUI qui le pilote et de packages NuGet. Par ailleurs, en plus d’apprendre à créer un installeur (Setup), cette solution permettra de disposer d’un utilitaire très intéressant.

2-2. A quoi il ressemble

Image non disponible

3. Préparation de Visual Studio pour pouvoir créer un Setup

3-1. Visual Studio Installer Projects

Visual Studio installer Projects, lors de l’installation, modifie trois emplacements principaux sur le PC cible :

  • le répertoire des programmes ;
  • le bureau ;
  • le menu démarrer.

Ces trois emplacements sont symbolisés par trois répertoires (folders) :

  • application Folder ;
  • user’s Desktop ;
  • user’s Programs Menu.

Au fur et à mesure de la création du Setup, ces dossiers seront garnis automatiquement ou manuellement avec les éléments nécessaires.

Image non disponible

3-2. Installation de l’extension « Microsoft Visual Studio Installer Projects »

C’est cette extension qui permettra de générer le Setup (cf. si nécessaire significationVocabulaire (terminologie) Microsoft).

Pour éviter de parcourir toutes les extensions, saisir dans la zone de recherche en haut à droite : Microsoft Visual Studio Installer

Image non disponible

Image non disponible

Comme pour moi l’extension est installée, elle est cochée, sinon il y aurait un bouton « Télécharger ».

Après avoir cliqué sur « télécharger », l’extension sera disponible au prochain lancement de Visual Studio.

Pour la présente « solution » - au sens « projet » dans Visual Studio-, mais aussi pour toutes les autres.

3-3. Téléchargement des sources du programme à installer

Télécharger les sources

Image non disponible

Le premier zip contient les exécutables (on n’en a pas forcément besoin, puisqu’on va les recréer).

Le deuxième zip c’est, comme indiqué, les sources.

3-4. Chargement des sources (la solution) dans Visual Studio

On dé-zippe le fichier des sources dans un répertoire de son choix, pour les projets c#.

Puis on double clique sur le fichier PathLengthChecker.sln (ou depuis Visual Studio Fichier-> Ouvrir -> Fichier/solution → PathLengthChecker.sln.

Image non disponible

Dans l’explorateur de solutions, on a maintenant :

Image non disponible

3-5. Construction de la solution

Pour s’assurer qu’il n’y a pas d’erreurs.

Image non disponible

Pour générer les projets nécessaires (console et GUI), vérifier qu’ils sont cochés dans le gestionnaire de configuration.

Image non disponible

Si tout s’est bien passé, il y a un message de succès (et en général quelques avertissements plus ou moins clairs…).

Générer la Solution pour compiler uniquement les fichiers de projet et les composants qui ont été modifiés depuis la dernière génération.

Régénérer la Solution pour générer tous les fichiers projet et les composants.

4. On crée maintenant le projet Setup proprement dit

Il y a de très nombreuses possibilités pour créer un Setup. J’ai utilisé Visual Studio Installer Projects parce que c’est une extension gratuite pour Visual Studio, simple à utiliser et qui installe d’une façon classique dans le répertoire Programmes ou programmes(X86) (contrairement à ClickOnceClickOnce).

Programmes (x86) c’est la nouvelle désignation du répertoire Program Files (x86) dans l’explorateur de fichiers de Windows version française.

4-1. Création du projet SetUp

4-1-1. Lancement du Setup Wizard

Dans l’explorateur de solutions : clic droit sur la solution → « ajouter un nouveau projet »

L’exécutable de ce projet sera le Setup.

Pour cela, avec Visual Studio Installer Projects, il y a deux possibilités :

  • créer un projet Visual Studio Installer Projects et le compléter à la main ;
  • créer un projet Visual Studio Installer Projects avec un Wizard.

La première fois il est préférable d’utiliser le Setup Wizard. C’est ce que nous allons faire.

Image non disponible

Après avoir cliqué sur « Setup Wizard » suivre les étapes ci-dessous :

Image non disponible

Image non disponible
Image non disponible

4-1-2. Sélection de ce qui doit être installé

Ici il y a deux projets, un en mode console qui cherche les répertoires et un GUI (interface graphique) qui facilite l’utilisation du premier.

Il faut donc sélectionner la sortie principale des deux projets (console et GUI) qui est PathLengthChecker.exe et PathLengthCheckerGUI.exe.

Image non disponible
Image non disponible

On clique sur suivant :

Image non disponible

Laisser vide ou ajouter par exemple des fichiers comme :

  • readmefirst.txt ;
  • licence.txt ; fichier d’aide.chm.

Pour ajouter des fichiers divers on peut utiliser « Choose files to include » mais aussi clic droit sur le répertoire → Add → Files.

Image non disponible

Le wizard est fini, cliquer sur « terminer ».

Le projet de Setup est créé.

4-1-3. A quoi ressemble le projet Setup

Image non disponible

Le Wizard a détecté les DLL et Framework nécessaires. Il reste à personnaliser le setup.

4-2. Personnalisation et completion du setup

4-2-1. Nom de l’entreprise, Nom de l’auteur, nom de l’application etc.

Après un clic droit sur le projet Setup, on indique le nom de l’auteur, de la société, la version etc. dans les propriétés.

Image non disponible

4-2-2. Les icônes de raccourci sur le bureau et l’entrée du menu démarrer

Cette étape n’est pas totalement intuitive la première fois.

On pourrait penser qu’il suffit d’affecter une icône à l’application dans le projet à déployer, comme on le fait habituellement :

Image non disponible

C’est nécessaire, mais pas suffisant. Les développeurs de Visual Studio Installer Projects ne récupèrent pas cette icône ! Et si on en reste là, c’est l’icône par défaut qui est utilisée.

Pour avoir une icône personnalisée sur le raccourci du bureau et l’entrée du menu démarrer, après l’avoir créée (j’utilise le freeware Gfie 64 bits pour créer mes icônes) ou récupérée sur Internet ou sur son PC :

Image non disponible

Image non disponible

4-2-2-1. Étape 1 : rendre l’icône disponible pour l’installeur

Afficher le setup dans Visual studio, pour cela double cliquer dans l’explorateur de solutions sur « Sortie principale fromPathlength checkerGui  » (ou « Sortie principale from Pathlength checker »).

Image non disponible

Il faut maintenant copier l’icône dans « Application Folder » :
Clic droit sur Application Folder-> Add → Fichier → sélectionner l’ icône personnalisée. On peut aussi la copier dans « Users’s Desktop » et « User’s Programs Menu » (compte tenu de sa faible taille). On l’utilisera à l’étape 3 Affecter l’icône au short cutAffecter l’icône au short cut

Image non disponible

4-2-2-2. Étape 2 : créer le short cut

Puis toujours dans « Application Folder » -> clic droit sur Sortie principale fromxxxxxx(xxx=nom de l'appli)-> create shortcut -> déplacer (drag and drop) le raccourci (après l'avoir renommé à sa convenance) dans User's Desktop .

Image non disponible

Le raccourci est créé.

Image non disponible

On le renomme :

Image non disponible

4-2-2-3. Étape 3 : affecter l’icône au short cut

On va affecter notre icône personnalisée au raccourci que l’on vient de renommer, pour cela : clic droit sur ce dernier, puis clic gauche sur l’item « Fenêtre de propriétés (F4) » du menu déroulant :

Dans la fenêtre  propriété du Shortcut, Icon est valorisé à « none ». Sélectionner Browse -> sélectionner l'icône personnalisée là où on l’a mise préalablement (User’s Desktop, application folder, User’s Program menu).

Image non disponible

Résumé des étapes une à trois :

Image non disponible

Et pour finir d’affecter l’icône au short cut  :

Image non disponible

4-2-2-4. Étape 4 : on déplace le shortcut vers le dossier de destination

On glisse et dépose (drag and drop) le raccourci dans le dossier User’s Desktop

Image non disponible

Procéder de même pour ajouter l'icône dans l'item correspondant du menu (avec le dossier User's Programm Menu).
C’est presque fini, il ne reste plus qu’à générer le Setup.

Image non disponible

Si à la fin plusieurs raccourcis se trouvent dans l’un des 3 répertoires, il faut n’en conserver qu’un avant de générer le Setup.

4-3. Génération du Setup

Image non disponible

Pour que toutes les dependencies (dépendances) soient détectées et intégrées au Setup, il faut que les 3 projets soient générés (programme console, programme Gui, Setup). Pour cela, vérifier qu’ils sont biens cochés dans le gestionnaire de configurations.

Image non disponible

S’il n’y a pas d’erreur, c’est fini. Il n’y a plus qu’à le tester.

5. Test et lancement du Setup

On ouvre l’explorateur de fichiers après un clic droit sur Setup  :

Image non disponible

Notre Setup comporte deux fichiers :

Image non disponible

Pour le lancer, exécuter un double clic sur Setup.exe.

 
Image non disponible
Image non disponible

Image non disponible

On peut modifier le répertoire d’installation proposé.

 

Après avoir demandé l’accord de l’utilisateur pour procéder à des modifications de son appareil (Contrôle de compte utilisateur-UAC), l’installeur procède à l’installation.

Quelques secondes après, l’installation est terminée :

Image non disponible

C’est fini !

Pour la rédaction du tutoriel, j’ai construit à plusieurs reprises le Setup, en l’effaçant pour pouvoir revenir sur une étape. Pour cette raison, le nom du projet Setup est « Setup » ou « Setup1 ». Considérez comme identiques ces deux noms. Quand on ajoute un nouveau projet, Setup Visual Studio le nomme par défaut « Setup », s’il y a déjà un répertoire « Setup », il nomme le nouveau projet « Setup1 ». On peut changer ce nom si on le désire.

5-1. Ce qu’à fait le Setup

5-1-1. Dans le répertoire programmes (x86)

Image non disponible

5-1-2. Sur le bureau

Image non disponible

Double clic sur le raccourci et l’utilitaire se lance.

Image non disponible

Ça marche !

5-1-3. Dans le menu démarrer

Image non disponible

Suivant les applications déjà présentes dans « Récemment ajoutées », notre programme y figurera ou non. On peut éventuellement effacer préalablement cette liste si on veut le voir à coup sûr.

et

Image non disponible

5-1-4. Dans paramètres « Applications et fonctionnalités »

Image non disponible

Je n’ai pas trouvé comment afficher l’icône personnalisée.

6. Les limitations de Visual Studio Installer

Il y en a de nombreuses par rapport à un installeur professionnel, en voici quelques-unes :

  • pas de test de la version du système d'exploitation avant d’installer ;
  • pas de modification de la base de registres ;
  • pas de choix du type d’installation (typique, personnalisée, complète) ;
  • pas de choix de la langue d’installation ;
  • pas de lancement de l’application à la fin du Setup ;
  • pas d’installation de service ;
  • pas de recherche de fichiers ou composants sur le PC (fichiers licence par exemple).

Cette liste de limitations, non exhaustive, fait que Visual Studio Installer Projects n’est pas destiné à des projets lourds.

7. D’autres installeurs libres et assez simples

Il y en a de très nombreux (un simple .bat peut parfois faire l’affaire)

Si on se cantonne à quelques installeurs « basiques freeware »

On peut citer :

  • ClickOnce ;
  • WiX ;
  • Application Packaging ;
  • Inno Setup.

7-1. ClickOnce

Le nom est très vendeur (mais un seul clic ne suffit pas tout à fait…). Rien à installer dans Visual Studio. Plus de possibilités que Visual Studio Installers Projects. Technologie au goût du jour. La documentation est claire et complète. L’application n’est pas installée dans Program Files ou Program Files (X86) mais dans Application data !

ClickOnce permet des mises à jour de programmes très faciles.

Exemple :

avec notre utilitaire installé grâce à CickOnce, l’exécutable est dans :

C:\Users\gabri\AppData\Local\Apps\2.0\Y27P8Q50.2CA\6MT21Z4Z.YBC\path..tion_fc49455a79f7119e_0001.0000_e29784ba905e4c94\PathLengthCheckerGUI.exe .

7-2. WiX

Écrit en open source, il propose une version dédiée pour Visual Studio.

C’est un produit complet, mais il faut prévoir du temps pour se l’approprier. En gros, il faut dans l’ossature d’un fichier XML, rajouter des lignes pour tout ce que doit faire le Setup. Dans un premier temps, le plus simple est de télécharger des projets WIX. Il y en a de très nombreux sur gitHub. Il suffit ensuite de personnaliser celui qui correspond le plus à ce que l’on veut faire.

Pour l’anecdote, à une époque lointaine, c’était le seul programme Open source de Microsoft !

Il faut installer l’extension WIX à Visual Studio et Le WIX Toolset.

7-3. Application Packaging

Il faut ajouter à la solution un projet de création de packages d’application Windows. Cette technologie est récente.

7-4. Inno Setup

Écrit en open source. Très utilisé initialement pour les programmes en Delphi notamment. Pour les applications C#, la difficulté pour un novice sera de déterminer les « dépendences » du programme (DLL nécessaires et autres Framework). Ne génère pas de .msi (fichier traditionnel pour installer sous Windows), mais un format propriétaire (qui peut éventuellement être converti en .msi avec une application tierce).

8. Quelques liens utiles

8-1. Une vidéo YouTube

https://www.youtube.com/watch?v=tiHBwAp_Kz4

N’utilise pas le Wizard, tout est fait « à la main ». Vidéo de qualité réalisée en anglais.

8-2. Un tutoriel en Anglais

9. Vocabulaire (terminologie) Microsoft

Solution : un ou plusieurs projets (à priori ayant un rapport entre eux) qui sont chargés simultanément dans Visual Studio quand on ouvre le fichier solution (*.sln). Dans Delphi par exemple on parle de groupe de projets.

Projet : du point de vue logique, un projet contient notamment tous les fichiers de code source, icônes, images, fichiers de données et ainsi de suite, qui sont compilés dans un fichier exécutable (extrait partiel de la documentation Microsoft sur Visual Studio).

Générer : créer l’exécutable (1) en précompilant les sources. On peut compiler une solution (tous les projets sélectionnés sont créés) ou générer un seul projet.

Régénérer : recréer tous les fichiers alors qu’avec « générer » seuls les fichiers qui sont affectés par les modifications depuis la dernière génération sont générés.

(1) en fait l’Assembly  qui est du code intermédiaire qui sera exécuté par le runtime .net.

Packages NuGet : c’est du code réutilisable que les autres développeurs mettent à votre disposition pour l’utiliser dans vos projets. Visual Studio permet d’intégrer très facilement ce code. On peut aussi définir NuGet comme un gestionnaire de bibliothèques (packages) externes.

10. Pour améliorer un peu l’ergonomie de l’application Path Length Checkers

Pour améliorer un peu, à mon goût, l’interface utilisateur (à intégrer aux sources ou pas. Dans un premier temps on pourra s’en dispenser).

Au volet solution : Projet PathLengthCheckerGUI → clic droit → définir comme projet de démarrage

À la form de PathLengthCheckerGUI : MainWindows.xaml diminuer la Largeur des boutons Get Path Lengths, Copy Paths to Clipboard without Lengths, Copy Paths to Clipboard . Les libellés de la form peuvent éventuellement être traduits en français.

Au code :

 
Sélectionnez
// dans l’explorateur de solution cliquer sur « mainwindows.xaml.cs »
// clic droit dans la fenêtre → afficher le code : 
private void btnGetPathLengths_Click(object sender, RoutedEventArgs e)
{
Mouse.OverrideCursor = Cursors.Wait; //Ajout
GetPaths();
Mouse.OverrideCursor = Cursors.Arrow; //Ajout
 
             
private void Window_Loaded(object sender, RoutedEventArgs e)
            //init val long path et search pattern
        {
            numMinPathLength.Value = 240; // Ajout, cette valeur peut être optimisée  
            txtSearchPattern.Text = "*";// ajout, superflu (c’est fait dans le programme) mais plus clair
        }
Mainwindows.xaml.cs ligne 132
                if (Paths.Count == 0)
                { MessageBox.Show("Aucun répertoire ou fichier ne correspond aux critères"); }

11. Remerciements

Je remercie Chrtophe pour sa relecture technique ainsi qu’Escartefigue pour la relecture orthographique et l’amélioration du style.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2019 gaby277. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.