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

Langage Delphi Discussion :

Mettre un patch en place


Sujet :

Langage Delphi

  1. #1
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut Mettre un patch en place
    Bonsoir à toutes et à tous,

    J'ai un programme principal qui tourne trés bien, les utilisateurs (client) bénéficient des mises à jour et correctifs éventuels.

    Dans le cadre d'une mise à jour donc, je modifie que l'executable du programme, mais comment puis-je procéder au plus simple ?

    - dois-je utiliser un InnoSetup spécial pour la mise à jour s'achant que je trouve cela trés lourd juste pour une copie d'exe.

    - puis-je concatener (si le terme si prete) mon exe avec celui qui le déploirerai ? si oui comment incorporer un exe dans un programme pour qu'il ce "décompresse" dirons nous ?

    - Utiliser un Winzip payant me premettant de faire cette procédure...heu là je suis pas chaud bouillant...

    - une autre astuce ?

    Je suis pret à lire n'importe quel lien qui traiterait de ce genre de chose.

    Merci.

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 119
    Points : 41 254
    Points
    41 254
    Billets dans le blog
    63
    Par défaut
    salut,

    as - tu regarde le composant jvPatch de la jvcl peut-être correspond t-il a tes besoins . Sinon il me semble avoir vu un post de ce genre avec le ftp.

    dernière solution (celle que j'utilise à l'usine mais c'est un réseau local).
    mon programme teste si une mise à jour existe (un fichier zip de l'exe)
    si oui et si l'utilisateur confirme ce dernier s'arrête après avoir lancé le programme de mise à jour qui lui écrase l'ancienne version et la redémarre

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 764
    Points : 13 386
    Points
    13 386
    Par défaut
    La pluspart des zippers gratuit permettent de convertir un zip en fichier auto extractible.

    Pour ajouter un exe en ressource:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //TonProg.rc
    TonProg RCDATA "X:\TonProg.exe"
    Puis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure Extract;
    var
      fo :TFileStream;
      rs :TResourceStream;
    begin
      rs := TResourceStream.Create(hInstance, 'TonProg', RT_RCDATA);
      fo := TFileStream.Create('TonProg.exe', fmCreate);
      fo.CopyFrom(rs, rs.Size);
      rs.Free;
      fo.Free;
    end;

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 119
    Points : 41 254
    Points
    41 254
    Billets dans le blog
    63
    Par défaut
    Citation Envoyé par BuzzLeclaire Voir le message

    - Utiliser un Winzip payant me premettant de faire cette procédure...heu là je suis pas chaud bouillant...


    Je suis pret à lire n'importe quel lien qui traiterait de ce genre de chose.

    Merci.
    on voit que tu ne connais pas 7-zip et son module modifié (=installateur)
    ici

  5. #5
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Salut,

    Merci Sergio, mais je préfère programmer en dur pour maitriser tout le projet, effectivement je connaissais pas ce Zippeur.

    AndNotOr, donc j'ai utilisé ta proposition qui fonctionne exactement comme je cherchais, voilà la manipulation exacte que j'ai faite (pour les demandeurs) + une demande d'info complémentaire.
    1 - J'ai créé un fichier Text avec le bloc note où dedans j'ai ecris une seule ligne : PlanningLight RCDATA "PlanningLight.exe"
    2 - je l'ai renommé en .rc
    (PS : evidement j'ai mis mon vrai fichier EXE dans mon dossier où il y a le fichier .rc
    3 - je suis allé en commande DOS dans le repertoire de mon appli qui doit comprendre la ressource et j'ai tappé Brcc32 <Mon fichier>.rc ce qui m'a donné un fichier RES
    4 - J'ai supprimer mon EXE (pour mes tests)
    5 - j'ai fais ce programme d'install avec TA procédure un peu modifié :


    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
    // ...
    
    implementation
    
    {$R *.dfm}
    {$R PlanningLight.RES} // Ma ressource
     
    procedure TFPrincipal.Button1Click(Sender: TObject);
    var
      fo :TFileStream;
      rs :TResourceStream;
      Chemin :String;
      i: Integer;
    begin
      Chemin := LireDansLeRegistre('CheminEXE'); // On récupère où se trouve déjà le fichier en question
      if Chemin <> '' Then
        Begin
          Try
            Try
        {Proposition de Andy développez.com}    
              rs := TResourceStream.Create(hInstance, 'PlanningLight', RT_RCDATA);
              fo := TFileStream.Create(Chemin+'PlanningLight.exe', fmCreate);
              fo.CopyFrom(rs, rs.Size);
            Except
              on E : Exception do
              Begin
                  if E is EFCreateError then
                  Begin
    // Comment récupérer le numéro d'erreur qui indique que le fichier est déjà ouvert
    // Peut-être d'ailleur le fermer dans ce cas !!
                  end;
              end;
            end;
          Finally
            rs.Free;
            fo.Free;
          end;
        end
      else
        Showmessage('Ce patch ne peut être installé sur ce poste.'+#13+#10+
        'Contactez votre revendeur pour procéder à cette installation.');
    
    end;

    Donc peux-tu m'aider pour la partir en Rouge ?


    Sinon je me demande à force où tu peches sur Delphi ??? lol, t'es vraiment excellent.

    PS : Je l'aurais un jour je l'aurai...

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 764
    Points : 13 386
    Points
    13 386
    Par défaut
    Il n'y a pas de numéro d'erreur, mais uniquement un texte .

    Pour fermer l'application, il te suffit de retrouver la fenêtre principale par un FindWindow et de faire un SendMessage WM_CLOSE.

    Voici un exemple avec SendMessageTimeOut:
    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
    function CloseMyApp :boolean;
    var
      h :THandle;
      Res :cardinal;
      LastError :cardinal;
    begin
      Result := TRUE;
      h := FindWindow('TaClasse', 'TonTitre');
     
      if h <> 0 then
        //Demande la fermeture et attend max 5 secondes
        if SendMessageTimeOut(h, WM_CLOSE, 0, 0,  SMTO_ABORTIFHUNG, 5000, Res) = 0 then
        begin
          LastError := GetLastError;
          Result := FALSE;
     
          case LastError of
            ERROR_TIMEOUT :;  //Impossible d'arrêter l'application,
                              //(Peut-être une fenêtre "Enregistrer sous" affichée)
                              //tu dois aborter ou demander une action
                              //manuelle de l'utilisateur et recommencer.
            else MessageDlg(SysErrorMessage(LastError), mtWarning, [mbOk], 0);
          end;
        end;
    end;
    A noter que j'utilise le même principe depuis un script Inno Setup .

    PS: Il n'y a pas de miracle, 95% de recherche, de lecture et de tests pour 5% de programmation effective et cela depuis... + 25 ans

  7. #7
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Bien,

    De toute façon mon problème est résolu. voilà excatement ce que j'ai fais pour les erreurs, je vais pas me prendre la tête avec des FindWindow lolol, on c'est jamais.

    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
    procedure TFPrincipal.Button1Click(Sender: TObject);
    var
      fo :TFileStream;
      rs :TResourceStream;
      Chemin :String;
    begin
      fo := nil;
      rs := nil;
      Chemin := LireDansLeRegistre('CheminEXE');
      if Chemin <> '' Then
        Begin
          Try
            JvXPProgressBar1.Visible := True;
            JvXPProgressBar1.Position := 10;
            Application.ProcessMessages;
            Try
              rs := TResourceStream.Create(hInstance, 'PlanningLight', RT_RCDATA);
            Except
              on E : Exception do
              Begin
                Showmessage(
                'La recherche de la ressource pour mise en mémoire tampon, génère une erreur.'+#13+#10+
                'L''installation n''est pas possible dans ce context'+#13+#10+
                'Si le problème persiste, avertissez votre revendeur de ce message.'
                );
                Self.Close;
              end;
            end;
            JvXPProgressBar1.Position := 30;
            Application.ProcessMessages;
            Try
              fo := TFileStream.Create(Chemin+'PlanningLight.exe', fmCreate);
            Except
              on E : Exception do
              Begin
                Showmessage(
                'Problème de flux, fermer toutes les applications en cours et recommencer .'+#13+#10+
                'Si le problème persiste, avertissez votre revendeur de ce message.'
                );
                Self.Close;
              end;
            end;
            JvXPProgressBar1.Position := 60;
            Application.ProcessMessages;
            Try
              fo.CopyFrom(rs, rs.Size);
            Except
              on E : Exception do
              Begin
                Showmessage(
                'La copie effective du flux, génère une erreur.'+#13+#10+
                'L''installation n''est pas possible dans ce context'+#13+#10+
                'Si le problème persiste, avertissez votre revendeur de ce message.'
                );
                Self.Close;
              end;
            end;
            JvXPProgressBar1.Position := 100;
            Application.ProcessMessages;
            Showmessage('L''installation de la mise à jour est terminée.');
            Self.Close;
          Finally
            rs.Free;
            fo.Free;
          end;
        end
      else
        Showmessage('Ce patch ne peut être installé sur ce poste.'+#13+#10+
        'Contactez votre revendeur pour procéder à cette installation.');
    end;
    Merci encore

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 764
    Points : 13 386
    Points
    13 386
    Par défaut
    Ajoute encore l'erreur renvoyée à la fin de tes avertissements. Ce sera plus facile à debuger si tu sais qu'il s'agit d'un Access denied plutôt qu'un Cannot open....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Try
       ...
    Except
      on E : Exception do
      Begin
        Showmessage('Erreur...' +#13#13 +E.Message);
        Self.Close;
      end;
    end;

  9. #9
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut
    comment compte tu distribuer les maj ?

  10. #10
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    re,

    Je sais pas si tu liras coussati mais on c'est jamais.

    En fait je diffuse que l'exe qui est mis en ressource par copier-coller (en écrasant l'existant), le programme ce charge de tout.

    Précision je suis l'auteur du programme principal biensur, ce qui aide pour une installe de patch....lol...

    A+

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 28/08/2011, 12h45
  2. mettre à jour un objet place dans le contexte de l'appli
    Par lilli1407 dans le forum Struts 1
    Réponses: 6
    Dernier message: 09/11/2006, 16h58
  3. mettre une virgule à la place d'un point
    Par michelle1000 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 05/10/2006, 07h29
  4. Mettre un "0" à là place d'une cellule vide.
    Par P'tit Lio dans le forum Access
    Réponses: 22
    Dernier message: 24/07/2006, 14h19

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