IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

[Inno Setup] Install .NET Framework 4 & Execution selon Langue


Sujet :

VB.NET

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2010
    Messages : 151
    Points : 254
    Points
    254
    Par défaut
    Bonjour,

    Après plusieurs jours de recherche et n'arrivant pas à faire fonctionner les différentes solutions trouvées, je m'adresse à vous.

    J'ai deux problèmes avec Inno Setup, pour créer un installer d'une application VB.Net. Je ne souhaite pas utiliser la méthode de publication de Visual Studio qui ne fonctionne pas comme je le souhaite dans mon cas.

    1er problème : Installation du Framework 4.
    Avec le code ci-dessous, j'arrive bien à installer le .NET Framework 4 et à détecter si le Framework est déjà installé, malheureusement je n'arrive pas à combiner ces 2 techniques. la méthode InitializeSetup me renvoie bien la bonne valeur, mais je ne sais pas comment l'exploiter dans la partie [Run]. Je ne sais pas comment récupérer la valeur de retour d'une fonction.
    L'installation du .NET Framework étant (assez) longue, j'aimerais éviter de devoir la faire à chaque fois, comme actuellement.
    J'aurais aussi aimé savoir la progression de l'installation, mais je n'ai pas trouvé avec la version 4.

    2nd problème : Exécution conditionnelle.
    Ayant une application multilingue, je souhaiterais réutiliser le choix de la langue à l'installation pour lancer mon application directement dans la bonne langue. J'ai pour cela rajouté un argument à mon exécutable (FR/EN/DE), mais comment savoir quelle langue à été choisie au début de l'installation ?

    Voici un extrait de mon script ISS
    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
     
    [...]
    [Languages]
    Name: english; MessagesFile: compiler:Default.isl
    Name: french; MessagesFile: compiler:Languages\French.isl
    Name: german; MessagesFile: compiler:Languages\German.isl
     
    [...]
     
    [Run]
    ;#define res {code:IsDotNetDetected|'v4\Full', 0}
    ;#if res == true
    ;Filename: {tmp}\dotNetFx40_Full_setup.exe; WorkingDir: {tmp}; StatusMsg: Installation en cours de .NET Framework 4.0, cette opération peut prendre quelques minutes...
    ;#endif
     
    ;#if french
    Filename: {app}\Mon_Appli.exe; Parameters: "FR"; Description: {cm:LaunchProgram,Mon_Appli}; Flags: nowait postinstall skipifsilent
    ;#elseif english
    ;Filename: {app}\Mon_Appli.exe; Parameters: "EN"; Description: {cm:LaunchProgram,Mon_Appli}; Flags: nowait postinstall skipifsilent
    ;#elseif german
    ;Filename: {app}\Mon_Appli.exe; Description: {cm:LaunchProgram,Mon_Appli}; Flags: nowait postinstall skipifsilent
    ;#endif
     
    [Code ; ] supprimé à cause de la balise code
    function IsDotNetDetected(version: string; service: cardinal): boolean;
    // Indicates whether the specified version and service pack of the .NET Framework is installed.
    //
    // version -- Specify one of these strings for the required .NET Framework version:
    //    'v1.1.4322'     .NET Framework 1.1
    //    'v2.0.50727'    .NET Framework 2.0
    //    'v3.0'          .NET Framework 3.0
    //    'v3.5'          .NET Framework 3.5
    //    'v4\Client'     .NET Framework 4.0 Client Profile
    //    'v4\Full'       .NET Framework 4.0 Full Installation
    //
    // service -- Specify any non-negative integer for the required service pack level:
    //    0               No service packs required
    //    1, 2, etc.      Service pack 1, 2, etc. required
    var
        key: string;
        install, serviceCount: cardinal;
        success: boolean;
    begin
        key := 'SOFTWARE\Microsoft\NET Framework Setup\NDP\' + version;
        // .NET 3.0 uses value InstallSuccess in subkey Setup
        if Pos('v3.0', version) = 1 then begin
            success := RegQueryDWordValue(HKLM, key + '\Setup', 'InstallSuccess', install);
        end else begin
            success := RegQueryDWordValue(HKLM, key, 'Install', install);
        end;
        // .NET 4.0 uses value Servicing instead of SP
        if Pos('v4', version) = 1 then begin
            success := success and RegQueryDWordValue(HKLM, key, 'Servicing', serviceCount);
        end else begin
            success := success and RegQueryDWordValue(HKLM, key, 'SP', serviceCount);
        end;
        result := success and (install = 1) and (serviceCount >= service);
    end;
     
    function InitializeSetup(): Boolean;
    begin
        if not IsDotNetDetected('v4\Full', 0) then begin
            result := false;
        end else
            result := true;
    end;
    Version ISS utilisée : 5.4.2 (a)

    Merci d'avance,

    Mathieu

    Citation Envoyé par matll Voir le message
    1er problème : Installation du Framework 4.
    Avec le code ci-dessous, j'arrive bien à installer le .NET Framework 4 et à détecter si le Framework est déjà installé, malheureusement je n'arrive pas à combiner ces 2 techniques. la méthode InitializeSetup me renvoie bien la bonne valeur, mais je ne sais pas comment l'exploiter dans la partie [Run]. Je ne sais pas comment récupérer la valeur de retour d'une fonction.
    L'installation du .NET Framework étant (assez) longue, j'aimerais éviter de devoir la faire à chaque fois, comme actuellement.
    J'aurais aussi aimé savoir la progression de l'installation, mais je n'ai pas trouvé avec la version 4.
    1er problème résolu . Il suffisait de rajouter un Check
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    [Run]
    Filename: {tmp}\dotNetFx40_Full_x86_x64.exe; Parameters: "/q"; WorkingDir: {tmp}; StatusMsg: Installation en cours de .NET Framework 4.0, cette opération peut prendre quelques minutes...; Check: NOT verifDotNet
     
    [Code ]
    function verifDotNet(): Boolean;
    begin
        result := IsDotNetDetected('v4\Full', 0);
    end;
    J'ai rajouté la fonction verifDotNet car je n'ai pas trouvé comment passer le paramètre de IsDotNetDetected depuis le script.

    Plus que mon problème d'exécution en fonction de la langue d'installation.

    Citation Envoyé par matll Voir le message
    2nd problème : Exécution conditionnelle.
    Ayant une application multilingue, je souhaiterais réutiliser le choix de la langue à l'installation pour lancer mon application directement dans la bonne langue. J'ai pour cela rajouté un argument à mon exécutable (FR/EN/DE), mais comment savoir quelle langue à été choisie au début de l'installation ?
    2ème problème résolu . Même type de solution que pour mon 1er problème, suffisait de rajouter une instruction sur ma ligne de lancement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [Run]
    Filename: {app}\Mon_Appli.exe; Parameters: "FR"; Description: {cm:LaunchProgram,Mon_Appli}; Flags: nowait postinstall skipifsilent; Languages: french
    Filename: {app}\Mon_Appli.exe; Parameters: "EN"; Description: {cm:LaunchProgram,Mon_Appli}; Flags: nowait postinstall skipifsilent; Languages: english
    Filename: {app}\Mon_Appli.exe; Parameters: "DE"; Description: {cm:LaunchProgram,Mon_Appli}; Flags: nowait postinstall skipifsilent; Languages: german
    Plus qu'un "problème" secondaire : la progression de l'install du Framework.

    Voilà, solutions trouvées tout seul après près de 2 semaines, mais en se penchant dessus sérieusement on trouve plus vite, faut juste trouver le temps. En espérant que ça puisse servir à d'autres.

    Je vous laisse mon script en pièce jointe (renommé en .txt pour l'up).

    @+

    Mathieu
    Fichiers attachés Fichiers attachés

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    Je voudrais savoir si votre Framework est Install direct au début de votre setup ?

    Car en fait dans mon setup je test si Framework au "InitializeSetup" car plus loin mon programme a besoin du frame 1.1 mini et le 2.0 pour exécuter une mise a jour.

    Le problème est que je mets bien mes fichier dans la parti files pour les intégrer a mon Setup mais une fois que je fais un shellexec il ne ce passe rien car je ne sais pas comment sortir mes Framework pour les mettre dans le dossier tmp.

    Merci par avance.


    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
     
    file
    Source: "C:\TRAVAIL\Install Chrysalide\Install_nattest\FrameWork\NetFx1_1.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall 
    Source: "C:\TRAVAIL\Install Chrysalide\Install_nattest\FrameWork\NetFx2SP1_x86.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall 
    Source: "C:\TRAVAIL\Install Chrysalide\Install_nattest\FrameWork\NetFx2SP1_x64.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall 
     
    ///////////////////////////////////////////////////////////////////////
    /////// Function qui son appeler pour verif le Framework 1.0    //////
    ///////////////////////////////////////////////////////////////////// 
    function VerifierFramework1(): Boolean;
    var
      ErrorCode: Integer;
      NetFrameWorkInstalled : Boolean;
      Result1 : Boolean;
    begin
      //LA CLE CORRESPONDANT AU FRAMEWORK 1.0 EXISTE-T-ELLE ?
      NetFrameWorkInstalled := RegKeyExists(HKLM,'SOFTWARE\Microsoft\.NETFramework\v1.0');
     
      //SI OUI :
      if NetFrameWorkInstalled then
      begin
        //ON RETOURNE TRUE
        Result := true;
      end 
      else
      begin
        //SINON ON DEMANDE SI ON VEUT INSTALLER
        Result1 := MsgBox('Cette installation requiert le .NET Framework 1.0. Voulez vous installer le .NET Framework maintenant ?',mbConfirmation, MB_YESNO) = idYes;
        if Result1 =false then
        begin
          //SI ON NE VEUT PAS INSTALLER ON RENVOIE FALSE
          Result:=false;
        end else
        begin
         //SI ON VEUT BIEN INSTALLER ON LANCE L'INSTALLATION
          //ShellExec('open',ExpandConstant('{src}\Framework\NetFx1_1.exe'),'','',SW_SHOWNORMAL,ewNoWait,ErrorCode);
          ShellExec('open',ExpandConstant('{tmp}\NetFx1_1.exe'),'','',SW_SHOWNORMAL,ewNoWait,ErrorCode);
        end;
      end;
    end;
    ////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////
     
     
     
    ///////////////////////////////////////////////////////////////////////////
    /////// Function qui son appeler pour verif le Framework 2.0 SP1    //////
    ///////////////////////////////////////////////////////////////////////// 
    function VerifierFramework2(): Boolean;
    var
      ErrorCode: Integer;
      NetFrameWorkInstalled : Boolean;
      Result1 : Boolean;
    begin
      //LA CLE CORRESPONDANT AU FRAMEWORK 2.0 EXISTE-T-ELLE ?
      NetFrameWorkInstalled := RegKeyExists(HKLM,'SOFTWARE\Microsoft\.NETFramework\v2.0 SP1');
     
      //SI OUI :
      if NetFrameWorkInstalled then
      begin
        //ON RETOURNE TRUE
        Result := true;
      end 
      else
      begin
        //SINON ON DEMANDE SI ON VEUT INSTALLER
        Result1 := MsgBox('Cette installation requiert le .NET Framework 2.0 SP1. Voulez vous installer le .NET Framework maintenant ?',mbConfirmation, MB_YESNO) = idYes;
        if Result1 =false then
        begin
          //SI ON NE VEUT PAS INSTALLER ON RENVOIE FALSE
          Result:=false;
        end else
        begin
          //SI ON VEUT BIEN INSTALLER ON LANCE L'INSTALLATION                           
          if  IsWin64 then
          begin       
            //si il est en 64bits
            //ShellExec('open',ExpandConstant('{src}\Framework\NetFx2SP1_x64.exe'),'','',SW_SHOWNORMAL,ewNoWait,ErrorCode);
            ShellExec('open',ExpandConstant('{tmp}\NetFx2SP1_x64.exe'),'','',SW_SHOWNORMAL,ewNoWait,ErrorCode);
          end
          else
            //sinon il est en 32bits
            //ShellExec('open',ExpandConstant('{src}\Framework\NetFx2SP1_x86.exe'),'','',SW_SHOWNORMAL,ewNoWait,ErrorCode);
            ShellExec('open',ExpandConstant('{tmp}\NetFx2SP1_x86.exe'),'','',SW_SHOWNORMAL,ewNoWait,ErrorCode);
          begin
          end;
     
        end;
      end;
    end;
    ////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////
     
     
     
     
    ///////////////////////////////////////////////////////////////////////
    ////// Initialise le setup pour tester si il y a un FrameWork   //////
    /////////////////////////////////////////////////////////////////////
    function InitializeSetup(): Boolean;
    begin
      //SI LE FRAMEWORK EXISTE :
      if VerifierFramework1() then
      begin
        //ON DONNE LA POSSIBILITE DE CONTINUER !
        Result := true; 
      end 
      else
      begin
        Result := false;
      end; 
     
      if VerifierFramework2() then
      begin
        //ON DONNE LA POSSIBILITE DE CONTINUER !
        Result := true;
     
      end
      else
      begin
        Result := false;
      end;
    end;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/12/2012, 13h34
  2. Réponses: 0
    Dernier message: 04/02/2008, 13h57
  3. [Inno Setup] Installer mysql avec Inno Setup
    Par colfire_dev dans le forum Outils
    Réponses: 0
    Dernier message: 10/01/2008, 13h22
  4. Réponses: 2
    Dernier message: 25/10/2007, 10h23
  5. [Inno Setup]Installation Multi plateforme
    Par Guinness82 dans le forum Installation, Déploiement et Sécurité
    Réponses: 2
    Dernier message: 29/09/2006, 13h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo