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] Vérifier une précédente installation avant d'installer


Sujet :

Outils Delphi

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut [Inno Setup] Vérifier une précédente installation avant d'installer
    Bonjour,

    Je suis novice avec Inno Setup et je n'ai aucune connaissance en Delphi, ni en aucun autre langage en fait. Heureusement je suis un peu débrouillard

    Je cherche depuis 2 bonnes heures à faire vérifier par mon installateur si une précédente version de mon appli est installée, et le cas échéant, déclenchant un message d'erreur demandant sa désinstallation.

    J'ai d'abord retourné l'aide d'Inno Setup, sans succès. Je suis ensuite tombé là dessus : http://www.lextm.com/2007/08/inno-se...r-version.html

    Puis là http://www.developpez.net/forums/d57...on-deja-faite/

    Ca m'a l'air tout bien et tout sauf que je ne sais pas ce qu'il faut changer pour que ça marche chez moi :s

    J'ai essayé avec le code de sjrd en indiquant où se trouve la clef, mais lors de l'installation rien ne se passe...

    Ce qui donnait, en changeant l'appid

    [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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    const
      OldVersionRegKey = 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{AF0C537F-16F1-4B3B-BA37-1556E34F55CA}_is1\';
     
    var
      HasOldVersion : boolean;
      OldVersionDisplayVersion : string;
      OldVersionInstallDir : string;
      OldVersionUninstallString : string;
     
    function OldVersionInfo(Param : string) : string;
    begin
      if Param = 'version' then
        Result := OldVersionDisplayVersion
      else if Param = 'installdir' then
        Result := OldVersionInstallDir
      else if Param = 'uninstallstring' then
        Result := OldVersionUninstallString
      else
        Result := '';
    end;
     
    procedure CheckOldVersion;
    begin
      HasOldVersion := RegKeyExists(HKLM, OldVersionRegKey);
      OldVersionDisplayVersion := '';
      OldVersionInstallDir := '';
      OldVersionUninstallString := '';
     
      if HasOldVersion then
      begin
        RegQueryStringValue(HKLM, OldVersionRegKey, 'DisplayVersion', OldVersionDisplayVersion);
        RegQueryStringValue(HKLM, OldVersionRegKey, 'InstallLocation', OldVersionInstallDir);
        RegQueryStringValue(HKLM, OldVersionRegKey, 'QuietUninstallString', OldVersionUninstallString);
      end;
    end;
    Ce que je voudrai, et je sais c'est nul ce genre de demande mais je n'ai pas envie d'apprendre le delphi alors que je sais pertinemment que je ne m'en servirai qu'une fois dans ma vie, c'est un code tout fait me permettant de réaliser ça

    Ou alors m'expliquer que faire :p

    Merci

  2. #2
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 984
    Points : 1 419
    Points
    1 419
    Par défaut
    chèque ou cb ?

    Un bon script n'a pas besoin de désinstaller les ancienne version, il met à jour sans problème ! Moi je m'en sert pour empêcher d'installer une ancienne version sur une plus récente.

    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
    ; Script generated by the Inno Setup Script Wizard.
    ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
     
    #define MyAppPath        "D:\mes_programmes\my_club\output\"
    #define MyAppName       "My Club"
    #define MyAppNameUnder  "my_club"
    #define MyVersion       GetFileVersion(MyAppPath + MyAppNameUnder + ".vmp.exe")
    #define MyAppId         "{CA45C15E-0FDC-48C3-A4CB-92E76C70F512}"
     
    [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}
     
    [Code]
    // -- renvoie à un numéro de version segmentée sans .
    function CutToThis(var StrVersion: String): Integer;
    var
      WhereDot: Integer;
    begin
      //Trouve la position du premier .
      WhereDot := Pos('.', StrVersion);
      //si aucun . est trouvé on renvoie le résultat sous forme de integer
      if WhereDot = 0 then
        Result := StrToInt(StrVersion)
      else
      begin
        //sinon on renvoie le numéro jusqu'au . sous forme de integer
        Result := StrToInt(Copy(StrVersion, 0, WhereDot - 1));
        //puis on enlève la partie renvoyée ainsi que le . De la chaîne passé en paramètres
        StrVersion := Copy(StrVersion, WhereDot + 1, Length(StrVersion));
      end;
    end;
     
    // -- on start install check version instaled
    function InitializeSetup(): Boolean;
    var
      InstalledVersion, ActualVersion: String;
      IV1, IV2, IV3, IV4, AV1, AV2, AV3, AV4: Integer;
    begin
      Result := True;
     
      // -- take number of version installed with .
      if not RegQueryStringValue( HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppId}_is1', 'DisplayVersion', InstalledVersion) then
        InstalledVersion := '0.0.0.0';
     
      // -- transform string version installed to 4 int number without .
      IV1 := CutToThis(InstalledVersion);
      IV2 := CutToThis(InstalledVersion);
      IV3 := CutToThis(InstalledVersion);
      IV4 := CutToThis(InstalledVersion);
      // -- transform string version to install to 4 int number without .
      ActualVersion := '{#MyVersion}';
      AV1 := CutToThis(ActualVersion);
      AV2 := CutToThis(ActualVersion);
      AV3 := CutToThis(ActualVersion);
      AV4 := CutToThis(ActualVersion);
      // -- if old is installed show warn and stop install
      If (IV1 < AV1) Or
        ((IV1 = AV1) And (IV2 < AV2)) Or
        ((IV1 = AV1) And (IV2 = AV2) And (IV3 < AV3)) Or
        ((IV1 = AV1) And (IV2 = AV2) And (IV3 = AV3) And (IV4 < AV4)) Then
      Begin
        MsgBox( 'Une ancienne version de {#MyAppName} est déjà installé.', mbError, MB_OK);
        Result := false;
        Exit;
      End;
    end;

  3. #3
    Membre habitué Avatar de Rahim-US
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2009
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2009
    Messages : 151
    Points : 134
    Points
    134
    Par défaut
    Salut, voila un exemple qui propose la désinstallation de la version précedente (si elle existe):

    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
     
    function InitializeSetup(): Boolean;
    var
      ResultCode: Integer;
      ResultStr:string;
      begin
        Result:=True;
        begin
          If RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Mon Application v1.0_is1', 'UninstallString', ResultStr) then
          begin
            If ResultStr<>'' then
            begin
              ResultStr:=RemoveQuotes(ResultStr);
              if MsgBox('L''iinstallation a détecté que ce programme est déjà installé. ' #13#13 'Souhaitez-vous désinstaller la version existante avant de poursuivre?', mbConfirmation, MB_YESNO) = idYes then
              if not Exec(ResultStr, '/silent', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then
              MsgBox('Erreur !!! ' #13#13 '' + SysErrorMessage(ResultCode) + '.', mbError, MB_OK);
            end;
          end;
       end;
    end;
    a+

Discussions similaires

  1. Réponses: 0
    Dernier message: 16/09/2010, 08h55
  2. [Inno Setup] Supprimer une clé registre
    Par ghost emperor dans le forum Outils
    Réponses: 1
    Dernier message: 10/02/2008, 12h10
  3. Réponses: 5
    Dernier message: 24/10/2007, 16h45
  4. [Inno Setup] ajouter une page avec des checkbox
    Par cotede2 dans le forum Installation, Déploiement et Sécurité
    Réponses: 4
    Dernier message: 28/05/2007, 23h01
  5. [inno setup] desinstaller une partie de l'application
    Par enigmatiqk dans le forum Installation, Déploiement et Sécurité
    Réponses: 2
    Dernier message: 29/11/2006, 06h10

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