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

Composants VCL Delphi Discussion :

Composant de mise à jour ( TUpdater)


Sujet :

Composants VCL Delphi

  1. #1
    Membre régulier Avatar de saidus
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46

    Informations forums :
    Inscription : Octobre 2004
    Messages : 165
    Points : 89
    Points
    89
    Par défaut Composant de mise à jour ( TUpdater)
    Bonjour,
    Je me demande s'il existe un composant (Delphi, Lazarus) en opensource qui fait la mise à jour de l'application en cours d'éxecution.
    Merci bien.
    Dhukmucmur Vernedh

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 377
    Points : 24 674
    Points
    24 674
    Par défaut
    Suffit de générer un BAT qui fait la mise à jour, j'ai écris le mien, j'ai pas le code sous la main maintenant, mais je repasserais.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 377
    Points : 24 674
    Points
    24 674
    Par défaut
    Contrairement à pas mal composant de ce genre, des Auto Update en Delphi, tu en trouves plein, mais si tu inclus du Zip ou auto-decompresseur ASPack or UPX, souvent cela devient un faux-positif de virus !

    J'ai une classe TSLTModuleAutoUpdate qui est implémenté par plusieurs engine tel que réseau local (avec credentials + partage sans disque monté), réseau local (avec disque), FTP(s), HTPP(S) ... la source varie mais la fin c'est presque toujours un BAT pour redémarrer le programme

    Typiquement "réseau local (avec disque)" se gère avec TSLTModuleAutoUpdateByDOSBatchEngine

    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
    { TSLTModuleAutoUpdateByDOSBatchEngine }
     
    //------------------------------------------------------------------------------
    function TSLTModuleAutoUpdateByDOSBatchEngine.GetLastVersion(): Boolean;
    var
      OldFileName, LastFileName: TFileName;
      OldFileRename, OldestFileRename: TFileName;
      ExeName, ExeDir: TFileName;
      VersionOld, VersionLast: string;
     
      BatOp: TStringList;
      DosStr: array of AnsiChar;
      BatName: string;
    begin
      Result := False;
     
      if (FDirectory = '') or (not SimpleDirectoryExists(FDirectory)) then
        Exit;
     
      OldFileName := Application.ExeName;
      ExeName := ExtractFileName(OldFileName);
      ExeDir := ExtractFileDir(OldFileName);
      LastFileName := IncludeTrailingPathDelimiter(FDirectory) + ExeName;
     
      if GetFileVersion(OldFileName, VersionOld) and
         GetFileVersion(LastFileName, VersionLast) then
      begin
         if (CompareVersion(VersionLast, VersionOld) > 0) and AcceptNewVersion(VersionOld, VersionLast) then
         begin
           OldFileRename := ChangeFileExt(OldFileName, '_exe.' + VersionOld);
           OldestFileRename := ChangeFileExt(OldFileName, '_exe.*');
           BatName := Format('%s\MAJArchive.bat', [ExeDir]);
     
           BatOp := TStringList.Create();
           try
             //BatOp.Add('@ECHO OFF');
             // Suppression des anciens sauvegardes
             BatOp.Add(Format('DEL /Q "%s"', [OldestFileRename]));
             // Sauvegarde de l'exe actuel
             BatOp.Add(':LoopRename');
             BatOp.Add(Format('RENAME "%s" "%s"', [OldFileName, ExtractFileName(OldFileRename)]));
             BatOp.Add(Format('IF NOT EXIST "%s" GOTO LoopRename', [OldFileRename]));
             // Suppression de l'exe actuel (le renommage est normalement suffisant, cela était utile sous Win2K avec sa gestion plus dur des Exe)
             BatOp.Add(':LoopDelete');
             BatOp.Add(Format('DEL "%s"', [OldFileName]));
             BatOp.Add(Format('IF EXIST "%s" GOTO LoopDelete', [OldFileName]));
             // Copie de la nouvelle version avec le nom normal de l'exe
             BatOp.Add(':LoopCopy');
             BatOp.Add(Format('COPY "%s" "%s"', [LastFileName, OldFileName]));
             BatOp.Add(Format('IF NOT EXIST "%s" GOTO LoopCopy', [OldFileName]));
             // Lancement de la nouvelle version par son nom normal
             BatOp.Add(Format('"%s"', [OldFileName]));
             // Auto-suppression du .BAT de mise à jour (après la fermeture de la nouvelle version)
             BatOp.Add(Format('DEL "%s"', [BatName]));
     
             // Unicode to DOS OEM
             SetLength(DosStr, Length(BatOp.Text)+1);
             if CharToOem(PChar(BatOp.Text), @DosStr[0]) then
               BatOp.Text := string(PAnsiChar(@DosStr[0]));
             BatOp.SaveToFile(BatName);
     
             // Lancement du .BAT
             // If the function ShellExecute fails, the return value is an error value that is less than or equal to 32.
             // It can be cast only to an int and compared to either 32
             Result := ShellExecute(0, 'open', PChar(BatName), nil, PChar(ExeDir), SW_HIDE) > 32;
           finally
             BatOp.Free();
           end;
         end;
      end;
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/01/2009, 17h44
  2. Réponses: 1
    Dernier message: 27/08/2008, 09h40
  3. Mise à jour des composants TMS
    Par kurkaine dans le forum C++Builder
    Réponses: 2
    Dernier message: 21/04/2007, 22h09
  4. [D7] mise à jour de composants => compilation impossible
    Par Magnus dans le forum Composants VCL
    Réponses: 6
    Dernier message: 27/09/2005, 15h53
  5. composants de mise à jour logiciels ....
    Par PierreT dans le forum Composants VCL
    Réponses: 3
    Dernier message: 29/08/2005, 18h07

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