web-dev-qa-db-fra.com

Inno Setup: installez un autre programme d'installation et exécutez-le avant de poursuivre mon installation

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}"
24
Juicy

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;
32
TLama

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.

10
Miral

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.

1
Leo_Italy