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] RegKeyExists


Sujet :

Outils Delphi

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2014
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2014
    Messages : 2
    Points : 2
    Points
    2
    Par défaut [Inno Setup] RegKeyExists
    Bonjour, est-ce que quelqu'un peut me dire ce qui cloche avec ce 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
    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
     
    #define MyAppName        "Zombiland"
    #define MyAppVersion     "1.1.1"
    #define MyApp            "Zombiland"
    #define MyAppId          "{198F01BC-E3B2-4421-BE4E-E3671A9E7AC2}"
     
    [Setup]
     
    AppName={#MyAppName}
    AppVersion={#MyAppVersion}
    AppVerName={#MyAppName} {#MyAppVersion}
    DefaultDirName={pf}\{#MyApp}
    AppId={{#MyAppId}
     
    [Code]
    const
      OldVersionRegKey = '\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppId}_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;
     
    function GetKey : Integer;
    begin
      if IsWin64 then
        Result := HKLM64
      else
        Result := HKLM32;
    end;
     
    procedure CheckOldVersion;
    begin
      HasOldVersion := RegKeyExists(GetKey, OldVersionRegKey);
      OldVersionDisplayVersion := '';
      OldVersionInstallDir := '';
      OldVersionUninstallString := '';
     
      if HasOldVersion then
      begin
        RegQueryStringValue(GetKey, OldVersionRegKey, 'DisplayVersion', OldVersionDisplayVersion);
        RegQueryStringValue(GetKey, OldVersionRegKey, 'InstallLocation', OldVersionInstallDir);
        RegQueryStringValue(GetKey, OldVersionRegKey, 'QuietUninstallString', OldVersionUninstallString);
      end;
    end;
     
    {*** INITIALISATION ***}
    Procedure InitializeWizard;
     
    begin
     
     
        MsgBox('Id Exist : ' + IntToStr(Integer(HasOldVersion)), mbInformation, MB_OK);
        MsgBox('Id : ' + OldVersionRegKey, mbInformation, MB_OK);
        MsgBox('Version : ' + OldVersionInfo('version'), mbInformation, MB_OK);
        MsgBox('Install Dir : ' + OldVersionInfo('installdir'), mbInformation, MB_OK);
        MsgBox('Uninstall String : ' + OldVersionInfo('uninstallstring'), mbInformation, MB_OK);
    end;
    Car quoi que je fasse la réponse est 'FALSE' alors que la clé existe bien?

    Merci.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    pour moi qui ne suis pas un expert Inno Setup, quand je lit le code Delphi je suis presque sûr qu'une constante n'est pas pré-traitée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      OldVersionRegKey = '\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppId}_is1';
    restera telle quelle alors que vous recherchez certainement (par déductio) la clé
    '\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{198F01BC-E3B2-4421-BE4E-E3671A9E7AC2}_is1'
    par contre, si vous définissez ça comme un format
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      OldVersionRegKey = '\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%s_is1';
    et que dans le code vous écrivez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    procedure CheckOldVersion;
    begin
      HasOldVersion := RegKeyExists(GetKey, Format(OldVersionRegKey,[appid]);
    (ou autre valeur que appid)
    le format devrait fournir la bonne clé (à vérifier car, j'ai l'impression que AppId={{#MyAppId} contient une accolade ouvrante de trop )
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    on n'était pas censé mettre deux accolades ouvrantes dans les chaines de caractères ?

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Aucune idée, Inno Setup et moi, c'est une très ancienne histoire, j'utilise rarement. Il y a la doc pour ça non ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    Citation Envoyé par pprem Voir le message
    on n'était pas censé mettre deux accolades ouvrantes dans les chaines de caractères ?
    Oui je confirme

    A faire au niveau de define pour que ce soit correct partout.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #define MyAppId "{{198F01BC-E3B2-4421-BE4E-E3671A9E7AC2}"
     
    [Setup]
    AppId={#MyAppId}

    Il faudrait aussi définir ArchitecturesInstallIn64BitMode=x64 pour la détection de la plateforme puisque le même installateur semble être utilisé pour deux versions du programme en 32 et 64 bits.

    1. Ca permettrait de supprimer cette fonction GetKey et de simplement utiliser HKLM.
    2. Ca redirigerait aussi {pf} sur la bonne racine, sinon ce sera systématiquement le répertoire 32 bits.
    3. Ca éviterait de dédoubler [Registry] pour supporter les deux plateformes.


    IsWin64 s'utilise principalement dans la section [Files] pour extraire les bons fichiers sur un Check: [not] IsWin64. C'est rare de devoir l'utiliser ailleurs si le flag ci-dessus est défini.

  6. #6
    Candidat au Club
    Inscrit en
    Janvier 2014
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2014
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    C'est fait c'est corrigé,
    J'ai ajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArchitecturesInstallIn64BitMode=x64
    Supprimé le code ou remplacé Par les 2 Fonctionnes (Pour ma part j'ai supprimé).


    Et effacé le Backslash au début de la chaîne de caractère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OldVersionRegKey = '\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppId}_is1';
    Et c'est OK tout fonctionne nickel merci pour votre aide.

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

Discussions similaires

  1. [Inno Setup] Recherche de tutoriels
    Par argon dans le forum Autres langages
    Réponses: 5
    Dernier message: 30/01/2006, 19h55
  2. [instalation] Modifier le language d'inno setup ou d'is tool
    Par méphistopheles dans le forum Installation, Déploiement et Sécurité
    Réponses: 2
    Dernier message: 26/01/2005, 21h59
  3. Delphi et inno setup
    Par drakes dans le forum Outils
    Réponses: 10
    Dernier message: 17/09/2004, 10h15
  4. [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
  5. Bde Inno Setup et Test
    Par Fxg dans le forum Bases de données
    Réponses: 2
    Dernier message: 20/07/2004, 14h35

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