Il n'existe actuellement aucun moyen de vérifier l'exécution réussie des entrées [Exécuter]. Le code enregistre simplement le code de sortie du processus et continue avec l'entrée suivante (il peut être examiné dans le fichier source Inno Setup Main.pas, la fonction est ProcessRunEntry(), en commençant à la ligne 3404 dans la version actuelle 5.2. 3).
Si vous avez besoin de vous assurer que plusieurs exécutions de msiexec ont réussi, vous devrez coder une couche intermédiaire. Cela peut être aussi simple qu'un petit bout qui est exécuté dans les entrées [Exécuter] et démarre msiexec.exe avec les paramètres corrects, attend la fin du processus, puis écrit le code retour dans un fichier.
Une autre façon de vérifier la réussite d'une telle étape d'installation serait d'ajouter un appel de procédure personnalisée pour chaque entrée [Exécuter] en utilisant le AfterInstall paramètre. Dans une telle fonction, vous pouvez par exemple vérifier si un contrôle OCX a été installé avec succès:
[Run]
Filename: "{tmp}\MyInstallation1.exe"; Parameters: "/foo"; AfterInstall: AfterMyInstallation1
[Code]
var
MyInstallation1Success: boolean;
procedure AfterMyInstallation1;
var
V: Variant;
begin
try
V := CreateOleObject('MyInstallation.InstalledOcxControl.1');
MyInstallation1Success := True;
except
MyInstallation1Success := False;
end;
end;
ou si les répertoires et les entrées de registre pour la dépendance sont tous là.
Chaque [Exécuter] est entrée exécutée uniquement lorsque son option paramètre Check ne retourne vrai. Ainsi, en fonction de vos besoins, vous pouvez démarrer toutes les installations silencieuses les unes après les autres et, après la fin, exécuter une fonction de script pour vérifier que toutes les dépendances ont été correctement installées; ou vous pourriez écrire une fonction de vérification pour chaque installation de dépendance, qui retournerait alors false et ainsi passerait toutes les autres installations après la première échec. Notez cependant que toutes les entrées [Exécuter] sont exécutées une fois que les étapes de copie de fichier, d'écriture de registre, etc. sont terminées, de sorte que vous avez pratiquement terminé l'installation. Si vous voulez réellement exécuter toutes vos étapes d'installation seulement quand toutes les dépendances sont correctement installées, alors vous devriez le faire plus tôt dans le processus, quand l'installation peut encore être annulée.
Edit: Consultez la question "How do you make Inno Setup not look frozen while performing a long Exec?" où certaines informations sont données et un exemple de script est lié à sur l'utilisation du Exec () fonction pour l'installation de dépendances. Donc, si vous n'utilisez pas [Exécuter] entrées il y a une bonne chance de réaliser ce que vous voulez.
Merci mghie, je pense que c'est ce que je suis à la recherche. Y a-t-il des hooks à annuler disponibles dans la section run? –
Désolé, j'ai édité ma réponse pour incorporer plus d'informations - il semble que vous ne puissiez pas vraiment faire ce que vous voulez en utilisant les entrées [Exécuter]. – mghie