script dans Inno Setup

Eléphant du PHP | 142 Messages

03 nov. 2011, 15:53

Bonjour,

Comme j'aime beaucoup ce forum, j'y poste mon problème, bien qu'incertain de sa bonne place ici...

J'ai créé une petite application en VB ; et j'ai décidé de passer par Inno Setup pour y inclure le framework .NET nécessaire au fonctionnement de mon application. J'ai créé (ou plutôt pompé et adapté) un code qui permet de lancer l'install du framework s'il n'est pas présent ; mais il a une lacune... (voir les commentaires dans le code)

Code : Tout sélectionner

begin NetFrameWorkInstalled := fileExists('C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regsql.exe'); // je déclare une variable qui renvoie "true" si un fichier relatif à la bonne installation du framework est présent, sinon elle renvoie "false" if NetFrameWorkInstalled then // s'il existe, alors le résultat sera "true" et on démarrera l'application de manière invisible pour l'utilisateur begin Result := true; end else // sinon, on lui annonce la mauvaise nouvelle, en lui proposant s'il veut installer le framework begin Result1 := MsgBox('L''application requiert le .NET Framework v4.0.30319. Voulez vous l''installer maintenant et relancer cette installation ensuite ?', mbConfirmation, MB_YESNO) = idYes; // s'il répond non, tout est fini if Result1 =false then begin Result:=false; end else // mais s'il répond oui, on lance l'installation du framework (que j'ai inclus dans le package créé avec Inno Setup). // et c'est là que j'ai mon problème ! J'aimerais que quand l'utilisateur clique sur "oui", l'installation du framework se lance. Or rien ne se passe, alors que je l'ai incluse dans la section "[Files]" de mon script dans Inno Setup... begin ShellExec('open', ExpandConstant('{app}\dotNetFx40_Full_x86_x64.exe'), '','',SW_SHOWNORMAL,ewNoWait,ErrorCode); end; end; end;
La ligne qui pose problème est donc la suivante :
ShellExec('open', ExpandConstant('{app}\dotNetFx40_Full_x86_x64.exe'), '','',SW_SHOWNORMAL,ewNoWait,ErrorCode);

Pourriez-vous m'aiguiller ? N'hésitez pas à me demander des choses si je n'ai pas été assez clair...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

03 nov. 2011, 19:33

Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans un forum plus adapté
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 142 Messages

04 nov. 2011, 11:57

En effet... Je ne savais pas trop où le mettre ! Désolé

Eléphant du PHP | 142 Messages

13 nov. 2011, 22:10

Si la réponse intéressait quelqu'un, la voici :

Pour lancer l'installation d'un exécutable compris dans le package d'Inno Setup (dans mon cas, détecter l'installation du .NET Framework 4), il faut utiliser la procédure CurStepChanged.
procedure CurStepChanged(CurStep: TSetupStep);
You can use this event function to perform your own pre-install and post-install tasks.

Called with CurStep=ssInstall just before the actual installation starts, with CurStep=ssPostInstall just after the actual installation finishes, and with CurStep=ssDone just before Setup terminates after a successful install
Dans mon cas, mon code ressemblait à ça :

Code : Tout sélectionner

function VerifierFramework(): Boolean; var ErrorCode: Integer; NetFrameWorkInstalled : Boolean; Result1 : Boolean; SP2Installed : Boolean; Result2 : Boolean; Test : String; begin NetFrameWorkInstalled := fileExists('C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regsql.exe'); if NetFrameWorkInstalled then begin Result := true; end else begin Result1 := MsgBox('L''application requiert le .NET Framework v4.0.30319. Or, vous ne le possédez pas sur votre ordinateur. Voulez vous l''installer maintenant et relancer cette installation ensuite ? (il est obligatoire au fonctionnement de l''application...)', mbConfirmation, MB_YESNO) = idYes; if Result1 =false then begin Result:=false; end else begin ShellExec('open', ExpandConstant('{app}\dotNetFx40_Full_x86_x64.exe'), '','',SW_SHOWNORMAL,ewNoWait,ErrorCode); end; end; end; procedure CurStepChanged(CurStep: TSetupStep); begin if(CurStep=ssPostInstall) then begin VerifierFramework(); end; end;

Merci à Fumble qui m'a aidé sur le forum du SiteDuZéro...