Bonjour,

Je débute dans l'utilisation de Innosetup et j'ai besoin de vos conseils éclairés.

Ma problématique de départ est la suivante : j'ai développé pour différents utilisateurs une "boite à outil" (oui, je sais, sous l'ère Hollande, ça devient très à la mode ... comme quoi il n'a pas inventé grand chose ...) qui est intégrée à leur application bureautique (Excel, Project, Access ...).
Cette boite à outil est donc composée de composants VBA (Modules, userForm). Pour restreindre le périmètre, disons que je me préoccupe plus particulièrment d'applications Msproject et Excel (La problématique access étant différente)

Dans le cas qui nous intéresse, je souhaite permettre aux utilisateurs de limiter au maximum les opération manuelles, et donc de diffuser les mises à jours événtuelles sous forme d'un setup distribuable par mail. L'utilisateur n'aura qu'a dézipper le fichier joint et lancer le setup. J'ai donc pensé utiliser l'outil innosetup à cet effet

2 cas peuvent alors se présenter :
- soit l'utilisateur n'a jamais installé la "boite à outil". Dans ce cas, celle-ci est présente sous forme d'un fichier template (.mpp ou .mpt pour msproject, .xlsx ou xlst pour excel)
- soit l'utilisateur utilsie déjà cette "boite à outil", et il doit mettre à jour ses fichiers avec la dernière version. Dans ce cas, la mise à jour se présente sous la forme d'un fichier setup.mpp ou setup.xlsx qui effectuera la mise à jour des composants. Cette partie a été développée, et elle marche.
Je souhaite donc que le setup contienne tous les cas de figures.

Pour préparer le setup, j'ai commencé à développer des programmes spécifique à chaque extension qui rassemble l'ensemble des composants et constitue le fichier setup. j'utilise alors à cet effet un squelette de fichier innosetup (extension .iss) que je souhaite customiser selon mes besoins, et qui sera compilé en fin de programme.

J'ai donc potassé la doc de innosetup et commencé à générer un setup qui ne me satisfait pas complètement.

Pour résumer, j'ai créé une page particulière de choix de type d'installation (de type CreateInputOptionPage) qui me permet de sélectionner les fichiers à diffuser.
Cependant, le choix du type d'installation doit conditionner l'utilisation de répertoires spécifiques :
Dans le cas de l'installation du template, le setup doit proposer à l'utilisateur de choisir un répertoire de destination. l'affichage de la page de sélection de répertoire doit s'afficher
Dans le cas d'une mise à jour, l'installation s'effectue dans un répertoire temporaire qui sera supprimé en fin d'installation. Il n'y a donc pas besoin de préciser l'emplacement du répertoire.

Et c'est là que je bute ...
J'ai pensé utiliser le paramètre DisableDirPage, mais je ne sais pas le conditionner.
J'ai pensé alors utiliser les option du pré-processeur (option #define), mais là, je suis quasiment néophyte ... car mes connaissances du Pascal remontent à mathusalem (c'est à dire au TurboPascal sous DOS...), d'autant plus je ne l'ai jamais utilisé sous Delphi.

Quelqu'un pourrait-il m'aider ?

Merci par avance pour vos conseils éclairés.

Je vous joins le fichier .iss que j'ai commencé à développer (il marche, si je supprime les instructions #define et que je remplace l'instruction DisableDirPage={#CheckIfTemplate} par DisableDirPage=true ou false)


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
 
  ; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
 
#Define  DisplayDirPage     CheckIfTemplate
 
[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.)
AppId={{F3FF7C4A-1612-49A6-9F70-32EAC2F8F06C}
AppName=Kit CP/DP
AppVersion=4.0
;AppVerName=Kit CPDP 4.0
AppPublisher=Umanis
AppPublisherURL=http://www.Umanis.com/
AppSupportURL=http://www.Umanis.com/
AppUpdatesURL=http://www.Umanis.com/
DefaultDirName={userdocs}\Kit CPDP
;DisableDirPage=true
DisableDirPage={#CheckIfTemplate}
DefaultGroupName=Kit CPDP
DisableProgramGroupPage=false
AllowNoIcons=true
OutputBaseFilename=setup_kitCPDP
SetupIconFile=C:\Users\Famille dumas Po\Dropbox\Dossier partagé Jean-Yves DUMAS\30 - kit projet DT\30 - Developpement\ConfigIni.ico
Compression=lzma
SolidCompression=true
WizardImageFile=Umanis_wizard_setup.bmp
WizardSmallImageFile=Umanis_wizardsetupsmall.bmp
AlwaysShowDirOnReadyPage=true
ShowLanguageDialog=no
LanguageDetectionMethod=locale
PrivilegesRequired=none
RestartIfNeededByRun=false
SetupLogging=true
 
[Languages]
Name: french; MessagesFile: compiler:Languages\French.isl
 
[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
 
[Files]
Source: ..\40 -Tests unitaires\Setup.mpp; DestDir: {userdocs}\_install_KitCPDP; Flags: ignoreversion deleteafterinstall; check : NOT CheckIfTemplate
Source: ..\40 -Tests unitaires\config.ini; DestDir: {userdocs}\_install_KitCPDP; Flags: ignoreversion; check : NOT CheckIfTemplate
Source: ..\40 -Tests unitaires\template_planning.xlsx; DestDir: {userdocs}\_install_KitCPDP; Flags: ignoreversion; check : NOT CheckIfTemplate
Source: ..\40 -Tests unitaires\Template_Umanis_reporting_projet.xls; DestDir: {userdocs}\_install_KitCPDP; Flags: ignoreversion; check : NOT CheckIfTemplate
Source: ..\40 -Tests unitaires\Template_Umanis_Saisie_Conso_RAF.xlsx; DestDir: {userdocs}\_install_KitCPDP; Flags: ignoreversion; check : NOT CheckIfTemplate
Source: ..\40 -Tests unitaires\config.ini; DestDir: "{app}"; Flags: ignoreversion; check : CheckIfTemplate
Source: ..\40 -Tests unitaires\template_planning.xlsx; DestDir: "{app}"; Flags: ignoreversion; check : CheckIfTemplate
Source: ..\40 -Tests unitaires\Template_Umanis_reporting_projet.xls; DestDir: "{app}"; Flags: ignoreversion; check : CheckIfTemplate
Source: ..\40 -Tests unitaires\Template_Umanis_Saisie_Conso_RAF.xlsx; DestDir: "{app}"; Flags: ignoreversion; check : CheckIfTemplate
Source: ..\30 - Developpement\Template-Planning DT  v1.00.mpp; DestDir: "{app}"; Flags: ignoreversion ; check : CheckIfTemplate
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
 
[Messages]
; *** "Welcome" wizard page
WelcomeLabel1=Bienvenue dans l'assistant d'installation du [name]
WelcomeLabel2=Cet assistant va vous guider dans l'installation du [name/ver] sur votre ordinateur.%n%nIl est recommandé de fermer votre projet en cours, ainsi que les application Excel événtuelles.
 
 
[Icons]
Name: {group}\Kit CPDP; Filename: {userdocs}\_install_KitCPDP\Setup.mpp
Name: {commondesktop}\Kit CPDP; Filename: {userdocs}\_install_KitCPDP\Setup.mpp; Tasks: desktopicon
 
[Run]
Filename: {userdocs}\_install_KitCPDP\Setup.mpp; Description: {cm:LaunchProgram,Kit CP-DP}; Flags: shellexec postinstall skipifsilent ; check : NOT CheckIfTemplate
 
[Code ... désolé ! mais c'est pour bien activer la balise code]
var
  UsagePage: TInputOptionWizardPage;
  DataDirPage: TInputDirWizardPage;
  UsageMode: String;
 
procedure InitializeWizard;
begin
  { Create the pages }
 
  UsagePage := CreateInputOptionPage(wpWelcome,
    'Type d''installation', 'Que voulez-vous faire?',
    'Précisez le type d''installation que vous souhaitez effectuer, puis cliquez sur ''Suivant''.',
    True, False);
  UsagePage.Add('Partir d''un projet vierge');
  UsagePage.Add('mettre à jour un projet existant');
 
 
 
  { Set default values, using settings that were stored last time if possible }
 
  case GetPreviousData('UsageMode', '') of
    'InstallDeTemplate': UsagePage.SelectedValueIndex := 0;
    'MiseAJour': UsagePage.SelectedValueIndex := 1;
  else
    UsagePage.SelectedValueIndex := 0;
  end;
 
end;
 
 
procedure RegisterPreviousData(PreviousDataKey: Integer);
begin;
log('-- appel de la fonction RegisterPreviousData --');
  { Store the settings so we can restore them next time }
  case UsagePage.SelectedValueIndex of
    0:
    begin
		UsageMode := 'InstallDeTemplate';
		log('Intallation du template kit CPDP');
    end;
    1:
    begin
		UsageMode := 'MiseAJour';
		log('Mise à jour d''un projet existant');
  end;
  end;
  SetPreviousData(PreviousDataKey, 'UsageMode', UsageMode);
end;
 
function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo,
  MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;
var
  S: String;
begin
  { Fill the 'Ready Memo' with the normal settings and the custom settings }
  S := '';
  S := S + 'Type d''installation :' + NewLine + Space;
  case UsagePage.SelectedValueIndex of
    0: S := S + 'Création d''un projet vierge';
    1: S := S + 'Mise à jour d''un projet existant';
  end;
  S := S + NewLine + NewLine;
 
  Result := S;
end;
 
function NextButtonClick(CurPageID: Integer): Boolean;
var
  ResultCode: Integer;
begin
Log('NextButtonClick(' + IntToStr(CurPageID) + ') called');
Result := true;
end;
 
function CheckIfTemplate : boolean;
begin
	log('-- appel de la fonction checkiftemplate --');
    Log('Usagepage : ' + IntToStr(UsagePage.SelectedValueIndex));
if UsagePage.SelectedValueIndex = 0 then
result := true
else
result :=false;
end;