Voici la partie [Fichiers] de mon code jusqu'à présent:
[Files]
Source: "other_installer.exe"; DestDir: "{app}"
Source: "myprogram.exe"; DestDir: "{app}"
Source: "data.dat"; DestDir: "{app}"
Source: "otherdata.dat"; DestDir: "{app}"
Mon programme dépend d'un autre programme à exécuter. J'ai inclus le programme d'installation de ce programme ("other_installer.exe") dans mon programme d'installation. Ce que je voudrais faire, c'est lancer ce programme d'installation dès qu'il a été copié, avant de continuer avec "myprogram.exe" et le reste.
J'ai recherché sur Google et trouvé la documentation de BeforeInstall dans l'aide à la configuration d'Inno, mais ils n'ont pas d'exemple d'exécution d'une autre application. Je pense que cela devrait être quelque chose comme ceci:
[Files]
Source: "other_installer.exe"; DestDir: "{app}"
Source: "myprogram.exe"; DestDir: "{app}"; BeforeInstall: // RUN OTHER_INSTALLER.EXE //
Source: "data.dat"; DestDir: "{app}"
Source: "otherdata.dat"; DestDir: "{app}"
Le paramètre AfterInstall
est préférable pour votre façon de procéder. Le script suivant exécutera la fonction RunOtherInstaller
juste après le traitement de l'entrée de fichier OtherInstaller.exe
. Là, il essaie d'exécuter le fichier OtherInstaller.exe
Qui vient d'être installé et si cela échoue, il signale un message d'erreur à l'utilisateur. Veuillez noter que vous ne pouvez pas interrompre l'installation à partir de cette fonction, il n'est donc pas très sûr de faire ce que vous voulez de cette façon:
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
[Files]
Source: "OtherInstaller.exe"; DestDir: "{app}"; AfterInstall: RunOtherInstaller
Source: "OtherFile.dll"; DestDir: "{app}"
[Code]
procedure RunOtherInstaller;
var
ResultCode: Integer;
begin
if not Exec(ExpandConstant('{app}\OtherInstaller.exe'), '', '', SW_SHOWNORMAL,
ewWaitUntilTerminated, ResultCode)
then
MsgBox('Other installer failed to run!' + #13#10 +
SysErrorMessage(ResultCode), mbError, MB_OK);
end;
Un autre bon moment pour exécuter les programmes d'installation prérequis est dans la fonction d'événement PrepareToInstall
. (Voir les exemples de scripts fournis avec Inno pour la structure de base et le code de TLama pour l'exécution réelle.)
Le principal avantage de PrepareToInstall
est qu'il vous permet de gérer les erreurs et de redémarrer les demandes de l'installateur enfant, contrairement à AfterInstall
.
Le principal inconvénient est que vous devez manuellement ExtractTemporaryFile
tout ce qui est nécessaire pour exécuter l'installation enfant, car cela se produit avant l'extraction des fichiers.
Vous pouvez utiliser AfterInstall, recherchez-le dans l'aide. Lorsque le fichier est juste copié, je lance la fonction/procédure que vous mettez comme "AfterInstall:".
Dans cette fonction/procédure, utilisez Exec et lancez l'autre programme d'installation.