PureBasic

Forums PureBasic
Nous sommes le Mar 19/Jan/2021 2:47

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 4 messages ] 
Auteur Message
 Sujet du message: [Tuto] InnoSetup: Packager ensemble appli 32 et 64 bits
MessagePosté: Mer 08/Fév/2017 11:31 
Hors ligne

Inscription: Sam 08/Fév/2014 15:19
Messages: 1865
Voici comment packager en un seul fichier les deux versions d'un programme Windows (32 et 64 bits)
avec le programme InnoSetup (Freeware Windows)

InnoSetup va en une seule opération:
  • Compacter l'ensemble des fichiers
  • Générer un dialogue dans plusieurs langues
  • Installer la bonne version selon l'OS (32 ou 64 bits)
  • Créer un groupe et un raccourci (au choix de l'utilisateur)
  • Créer le programme de désinstallation (avec une entrée dans le panneau de configuration)

Dans le gestionnaire de projet PB, créer deux cibles (x86 et x64) ayant soit un nom d'EXE différent (conseillé),
soit sauvegardés dans des répertoires différents.

:arrow: Lancer InnoSetup et utiliser l'assistant (Create New Script Using the Script Wizard)
:arrow: Ne s'occuper que de la version 32 bits.

Une fois que le script est généré, éditer le fichier comme ceci:
Dans la section [Setup] Ajouter
Code:
[Setup]
ArchitecturesInstallIn64BitMode=x64

Ensuite, il suffit d'aiguiller les fichiers selon la version
Dans la section Files, on ajoute la version 64 bits et on indique que la version 32 bits n'est pas à installer sur la version 64 bits
Le mot-clé est: not Is64BitInstallMode
Exemple:
Code:
[Files]
Source: "ACME_Viewer_32.exe"; DestDir: "{app}"; DestName: {#MyAppExeName}; Check: not Is64BitInstallMode; Flags: solidbreak
Source: "ACME_Viewer_64.exe"; DestDir: "{app}"; DestName: {#MyAppExeName}; Check:     Is64BitInstallMode; Flags: solidbreak


Le nom de l'EXE final est défini au début (#define MyAppExeName "ACME_Viewer.exe") donc pas de soucis pour ensuite faire appel à celui-ci dans le programme, qu'il soit sur x68 ou x64

Conseil: Sauvegarder le fichier .iss dans le répertoire source du projet.

:wink:


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [Tuto] InnoSetup: Packager ensemble appli 32 et 64 bits
MessagePosté: Mer 08/Fév/2017 11:40 
Hors ligne

Inscription: Sam 08/Fév/2014 15:19
Messages: 1865
Les données du programme.

Pour que le programme puisse écrire ces données (ex: son fichier .INI) on utilise le répertoire %AppData% (on y créé un sous-répertoire)
Ce répertoire reste accessible à l'utilisateur en écriture contrairement à ProgramFiles
En le mettant là on évite aussi de "polluer" le répertoire MesDocuments
Pour voir à quoi correspond ce répertoire, taper SET dans une fenêtre "DOS"

On va donc ici s'en servir pour fournir un fichier INI de base, mais qui est accessible en écriture.
Il ne sera pas visible par l'utilisateur directement, car %AppData% est un répertoire caché.

Section [Files], ajout d'un fichier INI qui sera par défaut conservé après désinstallation.
Code:
; Pour que les données du programme soient accessibles en écriture, on les met dans %AppData%
; Ex: installation d'un fichier ini exemple
; Le répertoire %AppData%\MonAppli_Datas sera créé automatiquement
; Ce répertoire correspond à roaming\..., c'est à dire qu'il est accessible en écriture à l'utilisateur
; Il le suivra même s'il se connecte en réseau local
; Tout fichier peut être renommé pendant l'installation
Source: "\Mon_INI_sample.ini"; DestDir: "{userappdata}\MonAppli_Datas"; DestName: "MonINI.ini"; Flags: uninsneveruninstall confirmoverwrite
; Ce fichier ne sera pas supprimé lors de la désinstallation
; Lors d'une réinstallation il y aura demande de confirmation

Ici, on a ajouté deux Flags:
uninsneveruninstall = Ne pas supprimer ce fichier lors de la désinstallation
confirmoverwrite = Confirmer avant de remplacer lors de la réinstallation (si existe)

Comme Ce répertoire n'est pas supprimé par défaut, on peut ajouter un bout de script pour demander à l'utilisateur s'il veut le supprimer.
Code:
; Par défaut, le programme de désinstallation supprimera tout ce qu'il a installé
; sauf les fichiers dont le flag est: uninsneveruninstall
; On peut ajouter des commandes pour supprimer d'autres fichiers
; Pour supprimer (avec confirmation le dossier des données (INI) %Appdata%\MonApplication on ajoute ce code en fin de script
[Code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usPostUninstall then
  begin
    if MsgBox('Voulez-vous supprimer le répertoire des données ?', mbConfirmation, MB_YESNO or MB_DEFBUTTON2) = IDYES then
    begin
        DelTree(ExpandConstant('{userappdata}\MonAppli_Datas'), True, True, True);
    end;
  end;
end;


:wink:


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [Tuto] InnoSetup: Packager ensemble appli 32 et 64 bits
MessagePosté: Mer 08/Fév/2017 11:49 
Hors ligne

Inscription: Sam 08/Fév/2014 15:19
Messages: 1865
Un dernier pour la déco:
Il est possible de personnaliser l'image du programme de setup.
(Exemple)

Deux images:
Celle de gauche de la page d'accueil (164x214 en 256 couleurs)
l'icône de chaque page (55x58)

Dans la section initiale [Setup]
Code:
WizardImageFile=<fichier>.bmp
WizardSmallImageFile=<fichier>.bmp


Globalement, un package InnoSetup occupe environ 250Ko en plus des programmes qu'il embarque (compressés automatiquement)
(contre 50 pour un .Zip auto, mais qui peut faire moins de choses).
C'est donc très rentable de packager pour simplifier l'usage de l'utilisateur final (débutant ou pressé), même si on a juste un seul EXE.

:wink:


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [Tuto] InnoSetup: Packager ensemble appli 32 et 64 bits
MessagePosté: Mer 27/Mai/2020 10:14 
Hors ligne

Inscription: Sam 08/Fév/2014 15:19
Messages: 1865
Voici une mise à jour du tuto pour ceux qui souhaitent pouvoir installer un programme sans privilège administrateur.

Dans la section [Setup] on remplace {commonpf} par {autopf} (ligne DefaultDirName)
puis on ajoute
PrivilegesRequired=lowest
Sans cette ligne il utilise par défaut
PrivilegesRequired=admin

Pour avoir les icônes sur le bureau de l'utilisateur
[Icons]
{userdesktop} à la place de {commondesktop}

Voilà, c'est tout.

Un programme installé ainsi n'est accessible qu'à l'utilisateur l'ayant installé (et à l'admin)
Au niveau PB, le programme est accessible dans GetEnvironmentVariable("LOCALAPPDATA")

Attention: si vous changez de mode d'installation (admin -> user) et que vous faites une mise à jour: dans ce cas il faut désinstaller en mode admin (pour remplacer les fichiers).
Le mode mise à jour d'une application se fait automatiquement quand le numéro d'identification application (AppId=) dans [Setup] ne change pas.

Bon, tout cela est dans la doc d'InnoSetup.

:wink:


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 4 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Google [Bot] et 9 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  
cron

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye