Créer un paquet exe¶
- Compiler sous Windows
Il y a des problèmes spécifiques à la compilation sous Windows. Regarder en particulier la doc de AbulEduFileV1 - Utilisation de inno-setup
- Utilisation de http://www.dependencywalker.com/ pour trouver les DLL nécessaires à l'exécution du logiciel
Lancez le logiciel et faites-le pointer vers l'exécutable créé lors de la compilation sous QTcreator. - Décision d'inclure les DLL dans chaque paquet logiciel (plus souple / portable). A vérifier que le script iss plus bas les prend bien tous en compte.
- Si on réutilise le fichier ISS ci-dessous il faut utiliser le menu tools/generate GUID
- Fichier ISS à utiliser de base pour les logiciels QT
; Script generated by the Inno Setup Script Wizard. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! [Setup] ; NOTE: The value of AppId uniquely identifies this application. ; Do not use the same AppId value in installers for other applications. ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) ; Exemple AppId={{62974C2F-0013-4262-AF5E-7F46C992672E} AppId={menu tools/generate GUID AppName=Le Terrier d'AbulEdu - Calcul Mental AppVersion=0.99 AppPublisher=RyXéo SARL AppPublisherURL=http://www.abuledu.org/leterrier/ AppSupportURL=http://www.abuledu.org/leterrier/ AppUpdatesURL=http://www.abuledu.org/leterrier/ DefaultDirName={pf}\AbulEdu\Calcul Mental DefaultGroupName=Le Terrier d'AbulEdu LicenseFile=../gpl-2.0.txt OutputDir=. OutputBaseFilename=leterrier-calculment-0.99-setup Compression=lzma SolidCompression=yes [Languages] Name: "french"; MessagesFile: "compiler:Languages\French.isl" [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked [Files] Source: "C:\code\leterrier-calculment\trunk\release\leterrier-calculmental.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\code\leterrier-calculment\trunk\images\*"; DestDir: "{app}\images"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "C:\Qt\2010.03\qt\bin\QtScript4.dll"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "C:\Qt\2010.03\qt\bin\QtNetwork4.dll"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "C:\Qt\2010.03\qt\bin\QtGUI4.dll"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "C:\Qt\2010.03\qt\bin\QtCore4.dll"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "C:\Qt\2010.03\qt\bin\mingwm10.dll"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "C:\Qt\2010.03\qt\bin\libgcc_s_dw2-1.dll"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [Icons] Name: "{group}\Calcul Mental"; Filename: "{app}\leterrier-calculmental.exe" Name: "{commondesktop}\Calcul Mental"; Filename: "{app}\leterrier-calculmental.exe"; Tasks: desktopicon [Run] Filename: "{app}\leterrier-calculmental.exe"; Description: "{cm:LaunchProgram,Calcul mental}"; Flags: nowait postinstall skipifsilent
Les valeurs à vérifier¶
Attention aux espaces inutiles à supprimer et attention il y a {{ en début et une seule }
AppId={{ Generate GUID }
AppName=Le Terrier d'AbulEdu - Nom_logiciel
AppVersion= version_logiciel
DefaultDirName={pf}\AbulEdu\ Nom_logiciel
DefaultGroupName=Le Terrier d'AbulEdu
OutputBaseFilename=leterrier- nom_logiciel_redmine - version_logiciel -setup
[Icons]
Name: "{group}\ Nom_logiciel "; Filename: "{app}\ Nom_logiciel_exe "
Name: "{commondesktop}\ Nom_logiciel "; Filename: "{app}\ Nom_logiciel_exe "; Tasks: desktopicon
[Run]
Filename: "{app}\ Nom_logiciel_exe "; Description: "{cm:LaunchProgram, Nom_logiciel }"; Flags: nowait postinstall skipifsilent
Quelques remarques d'Eric¶
Pourquoi inclure les DLL dans chaque logiciel ?- Les inconvénients :
- ça alourdit chaque paquet
- ça rend le téléchargement plus long (surtout pour ceux qui ont un débit limité)
- Les avantages :
- ça simplifie énormément la vie de l'utilisateur qui n'a pas à télécharger deux .exe pour faire marcher un logiciel
- chaque logiciel embarque avec lui la bonne version de la DLL, par exemple calculette actuellement sera avec QT 4.7 ce qui fait qu'un utilisateur dans 5 ans qui téléchargera la calculette aura la bonne version de la DLL "avec l'exe" ... regardez le pb de kidistib actuellement avec tcl 8.3 ou 8.4 ... ou 8.5 ?
- ça libère les développeurs de devoir se limiter aux fonctionnalités de la version de qt fournie dans l'éventuel setup-qt.exe commun
- ça simplifie la vie du packageur qui ne réfléchit pas aux conséquences sur les autres programmes de ce qu'il est en train de packager
Les paramètres à avoir en tête:
- la taille des disques durs est telle qu'il n'est plus du tout primordial de jouer la carte de l'optimisation en espace disque.
Donc, j'insiste pour qu'on insère les DLL dans les paquets d'installation windows. Oui ça n'est pas "propre", "optimal" ou tout ce que vous voulez mais n'oubliez pas notre approche pragmatique, "ce qui marche ... marche".
Cela dit, rien n'empêchera ou n'interdira un packageur tiers de faire autrement, c'est aussi ça la liberté du logiciel. Par exemple pour une utilisation d'un pack dans un package global comme un liveCD/DVD ou la framakey.
Signer les paquets¶
Après avoir payé le droit de douane auprès d'un vendeur de certificat "codesign" il faut passer à innosetup récent, configurer un codesign (menu tool) et faire une entrée "ryxeo" par exemple avec la commande suivante:
"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\signtool.exe" sign /f "C:\code\certificat.p12" /p lemotdepasse $p
signtool.exe est proposé par le SDK windows de microsoft (gratuit).
Pensez ensuite à ajouter la section suivante dans le fichier .iss
SignTool=ryxeo /d $qPackage d'installation$q $f SignedUninstaller=True SignedUninstallerDir=.