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

Outils Delphi Discussion :

Inno Setup popup confirmation et exec


Sujet :

Outils Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut Inno Setup popup confirmation et exec
    Salut,

    J'ai une question qui paraitra surement simple pour les connaisseurs.
    J'utilise cet outil afin d'installer mes applications sur des postes Windows. Je souhaiterais qu'à l'installation, il détecte si l'application est déjà présente et si c'est le cas la désinstalle avant de commencer l'installation.

    Pour ce faire, pour le moment, je teste si la variable de regisre est présente et si c'est le cas, j'affiche une message lui demandant de désinstaller l'application avant de continuer. J'utilise le code suivant :

    [CODE]
    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
     
    var MessageErreur : string;
    function InitializeSetup(): Boolean;
    // Vérification de la présence de l'application à l'installation
    begin
    	if RegKeyExists(HKEY_LOCAL_MACHINE,'SOFTWARE\TOTO ') = true then
    		begin
    		  MessageErreur := 'Veuillez désinstaller TOTO au préalable !! Merci.';
    			Msgbox(MessageErreur, mbConfirmation, MB_Ok);
          Result:=False;
    		end
    	else
    	  begin
    	    Result:=True;
    	  end
    end;
    Le problème est que vu que je retourne False, l'installation est stoppée et l'utilisateur doit désinstaller l'application et recliquer sur le setup d'installation.

    Je souhaiterais plutôt faire ceci :
    1- ouvrir un popup avec le même message mais avec le bouton OK ou annuler.
    2- Si click sur OK => la désinstallation se fait automatiquement en lançant unins000.exe (d'ailleurs comment le faire ?) et une fois fini, je fais un dernier test et si c ok, l'installation continue.
    3- Si click annuler => Stopper l'installation comme actuellment avec False

    Merci

    NB: Je ne connais absolument rien en delphi.

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Ce n'est normalement pas nécessaire avec InnoSetup : si le champ AppId reste le même, il détecte que c'est une mise à jour et non pas une installation conflictuelle, et il mettra le script de désinstallation à jour de façon correcte. Tu peux aussi automatiquement installer dans le répertoire de l'ancienne version via UsePreviousAppDir.

    Ensuite, il te suffit de créer une section [InstallDelete] pour supprimer les fichiers de l'ancienne version qui DOIVENT l'être (pour cause de conflit notamment). Ne pas oublier, bien entendu, la section UninstallDelete] pour supprimer les fichiers créés à l'exécution du programme et être certain de bien purger complètement ton répertoire d'application.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  3. #3
    Membre émérite
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    992
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 992
    Par défaut
    d'ac avec Mac LAK c'est prévu pour maintenant si ta trop de différence genre entre v1 et v2 moi j'utilise sa, sa propose de désinstaller automatiquement :

    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
     
    ; Script generated by the Inno Setup Script Wizard.
    ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
     
    #define MyAppName "My Program"
    #define MyAppVerName "My Program 1.5"
    #define MyAppPublisher "My Company, Inc."
    #define MyAppURL "http://www.example.com/"
    #define MyAppExeName "MyProg.exe"
    #define MyAppId "{C93793F-CDA6-4AF0-8F00-1502816C2699}"
    [Setup]
    ; NOTE: The value of AppId uniquely identifies this application.
    ; Do not use the same AppId value in installers for other applications.
    ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
    AppId={{#MyAppId}
    AppName={#MyAppName}
    AppVerName={#MyAppVerName}
    AppPublisher={#MyAppPublisher}
    AppPublisherURL={#MyAppURL}
    AppSupportURL={#MyAppURL}
    AppUpdatesURL={#MyAppURL}
    DefaultDirName={pf}\{#MyAppName}
    DefaultGroupName={#MyAppName}
    OutputBaseFilename=setup
    Compression=lzma
    SolidCompression=yes
     
    [Languages]
    Name: "english"; MessagesFile: "compiler:Default.isl"
     
    [Tasks]
    Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
     
    [Files]
    Source: "C:\Program Files\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
    ; NOTE: Don't use "Flags: ignoreversion" on any shared system files
     
    [Icons]
    Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
    Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
     
    [Run]
    Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#MyAppName}}"; Flags: nowait postinstall skipifsilent
     
    [code]
    // Vérification de la présence de l'application à l'installation
    function InitializeSetup(): Boolean;
    var
      UninstalFile: String;
      ErrorCode: Integer;
    begin
        Result       := True;
        UninstalFile := '';
        repeat
        //si on a un chemin de fichier UninstalFile n'est plus vide alors on averti sinon on continue l'installation
          if RegQueryStringValue( HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppId}_is1', 'UninstallString', UninstalFile) then
          begin        
              case MsgBox('TOTO doit d''abort etre desinstaller, voulez-vous le desinstaller automatiquement?', mbConfirmation, MB_YESNOCANCEL or MB_DEFBUTTON2) of
                IDYES:
                begin
                  //on lance desinstallation et attendons
                  ShellExec('', UninstalFile, ' /SILENT', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode);
                  //on vérifie que c'est bien désinstallé pour sortir ou non de la boucle
                UninstalFile := '';     
                  RegQueryStringValue( HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppId}_is1', 'UninstallString', UninstalFile);
                end;
                IDCANCEL:
                  //on arrête l'installeur
              Result := False;
          end;
        end;
      until (UninstalFile = '') or (Result = False);
    end;

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Merci pour vos réponses.
    Après lecture de vos réponses et de quelques doc, voici mon premier code delphi , j'espère que mon code est propre, sinon, vos critiques sont toujours les bienvenues

    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
     
    [Code]
    var
      MessageErreur : string;
      Version: String;
      FichierUninstall: String;
      ErrorCode: Integer;
    function InitializeSetup(): Boolean;
    // Vérification de la présence de l'application à l'installation
    begin
      if RegQueryStringValue( HKLM, 'SOFTWARE\TOTO', 'UninstallFile', FichierUninstall) then
        begin
          MessageErreur := 'Pour continuer l''installation, vous devez désinstaller TOTO'+Version+'.'
          + #13 + 'Souhaitez déinstaller le faire automatiquement ? ';
          // Récupération de la version installée
          RegQueryStringValue( HKLM, 'SOFTWARE\TOTO', 'CurrentVersion', Version);
          // On lance le désinstallation et attendons
          if RegQueryStringValue( HKLM, 'SOFTWARE\TOTO', 'UninstallFile', FichierUninstall) then
            begin
              case  Msgbox(MessageErreur, mbConfirmation, MB_YESNOCANCEL or MB_DEFBUTTON2) of
                // Ok pour desinstallation
                IDYES:
                  begin
                    // Lancement de la désinstallation
                    ShellExec('', FichierUninstall, ' /SILENT', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode);
                    // Verification que la désinstallation a bien eu lieu en vérifiant la variable FichierUninstall
                    FichierUninstall := '';
                    RegQueryStringValue( HKLM, 'SOFTWARE\TOTO', 'UninstallFile', FichierUninstall);
                  end
               // Refus de désinstallation => Arrêt installation
               else
                begin
                  Msgbox('L''installation est annulée car vous avez choisi de ne pas désinstaller l''ancienne version', mbConfirmation, MB_Ok);
                  Result := False;
                  Exit;
                end
              end
              // L'installation peut continuer
              Result := True;
            end
        end
      else
        Result := True;
    end;

  5. #5
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Salut

    A priori cela me parait bien.

    1° remarque le CR/LF se code #13#10 puisqu'on est sous Windows.

    Ensuite, je pense que tu dois inverser ces 2 lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
          // Récupération de la version installée
          RegQueryStringValue( HKLM, 'SOFTWARE\TOTO', 'CurrentVersion', Version);
          MessageErreur := 'Pour continuer l''installation, vous devez désinstaller TOTO'+Version+'.'
          + #13#10 + 'Souhaitez déinstaller le faire automatiquement ? ';
    @+ Claudius

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Merci pour le CR/LF, sinon pour la dernière remarque je m'en suis aperçu après le test. Tout roule.

    Merci tout le monde.

    Voici la version finale de la partie code pour ceux que ça intéressent !

    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
    [Registry]
    ; Création d'une clé à l'installation qui sera supprimée à la désinstallation.
    Root: HKLM; Subkey: SOFTWARE\TOTO; ValueType: string; ValueName: CurrentVersion; ValueData: 1.0; Flags: uninsdeletekey
    Root: HKLM; Subkey: SOFTWARE\TOTO; ValueType: string; ValueName: UninstallFile; ValueData: {uninstallexe}; Flags: uninsdeletekey
     
    [Code]
    var
      MessageErreur : string;
      Version: String;
      FichierUninstall: String;
      Registre: String;
      ErrorCode: Integer;
     
    function InitializeSetup(): Boolean;
    // Vérification de la présence de l'application à l'installation
    begin
      Registre := 'SOFTWARE\TOTO';
      if RegQueryStringValue( HKLM, Registre, 'UninstallFile', FichierUninstall) then
        begin
          // Récupération de la version installée
          RegQueryStringValue( HKLM, Registre, 'CurrentVersion', Version);
          MessageErreur := 'Pour continuer l''installation, vous devez désinstaller TOTO'+Version+'.'
          + #13#10 + 'Souhaitez vous le faire automatiquement ? ';
     
          // On lance le désinstallation et attendons
          if RegQueryStringValue( HKLM, Registre, 'UninstallFile', FichierUninstall) then
            begin
              case  Msgbox(MessageErreur, mbConfirmation, MB_YESNOCANCEL or MB_DEFBUTTON2) of
                // Ok pour desinstallation
                IDYES:
                  begin
                    // Lancement de la désinstallation
                    ShellExec('', FichierUninstall, ' /SILENT', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode);
                    // Verification que la désinstallation a bien eu lieu en vérifiant la variable FichierUninstall
                    FichierUninstall := '';
                    RegQueryStringValue( HKLM, Registre, 'UninstallFile', FichierUninstall);
                  end
              // Refus de désinstallation => Arrêt installation
              else
                begin
                  Msgbox('L''installation est annulée car vous avez choisi de ne pas désinstaller l''ancienne version', mbConfirmation, MB_Ok);
                  Result := False;
                  Exit;
                end
              end
              // L'installation peut continuer
              Result := True;
            end
        end
      else
        Result := True;
    end;

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/09/2009, 11h23
  2. Delphi et inno setup
    Par drakes dans le forum Outils
    Réponses: 10
    Dernier message: 17/09/2004, 10h15
  3. [INNO SETUP][ORACLE] Installer le client Oracle avec Inno
    Par AnnSo dans le forum Bases de données
    Réponses: 11
    Dernier message: 19/08/2004, 16h21
  4. Bde Inno Setup et Test
    Par Fxg dans le forum Bases de données
    Réponses: 2
    Dernier message: 20/07/2004, 14h35
  5. [jsp]popup confirmation de suppression
    Par alexandra_ape dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 05/07/2004, 16h57

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