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

 Delphi Discussion :

Redémarrer son application


Sujet :

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 Redémarrer son application
    Bonjour tout le monde,

    Est-il possible de redémarrer son application sur un clique bouton ?

    Si oui comment faire ?

    A plus

  2. #2
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut


    Sur ton appli elle-même ?

    @+

  3. #3
    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
    Oui

    je suis dans mon application, et je voudrais savoir si :
    1) je peux la fermer (sa j'y arriverais par un terminate)
    2) la redémarrer.



  4. #4
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Je vois un truc du genre :

    1. Récupérer le chemin de l'EXE de ton programme
    2. Ensuite Pointer un ShellExecute dessus.

    Ou d'ajouter du code dans ton OnClose pour relancer la bête.

    @+

  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
    Citation Envoyé par Droïde Système7 Voir le message
    Je vois un truc du genre :

    1. Récupérer le chemin de l'EXE de ton programme
    2. Ensuite Pointer un ShellExecute dessus.

    @+

    Effectivement sa à l'air d'être la solution.
    J'ai aussi trouver cela sur le forum*

    http://www.developpez.net/forums/d62...r-application/

    Je test.

  6. #6
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Je viens de tester et ça fonctionne impec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.Button5Click(Sender: TObject);
    begin
      Close;
      ShellExecute(0,'OPEN','Project1.exe', Nil, Nil, SW_SHOW);
    end;
    @+

  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
    Re,

    Alors en fait c'est plus compliquer que cela...

    Je m'explique :

    Je suis dans une form principal et je fais appel à une autre form comme ceci

    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
    procedure TFPrincipal.Activation1Click(Sender: TObject);
    begin
      With TForm2.Create(Self) do
      Begin
        Try
          if ShowModal = mrOk Then
          Begin
            redemarrerApplication := True;
            FPrincipal.Close;
          end;
        finally
          Free;
        end;
      end;
    end;
    Pour info La procédure create et close de ma form principal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TFPrincipal.FormCreate(Sender: TObject);
    Begin
      redemarrerApplication := False;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TFPrincipal.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      if redemarrerApplication then
      Begin
        ShellExecute(0,'OPEN',PChar(Application.ExeName),nil,nil,SW_SHOWNORMAL);
      end;
      Application.Terminate;
    end;
    Et voilà ce que je fais dans ma form2 :
    Mon Boutton est en mrNone au départ
    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
    procedure TFActivation.JvXPButton2Click(Sender: TObject);
    begin
      ModalResult := mrNone;
      With idFTP1 do
      Begin
        Host := 'xxxxxxxxxxx';
        Username := 'xxxxxxxxxxx';
        Password := 'xxxxxxxxxxx';
        Try
          Try
    //...
            Showmessage('l''application va redémarrer pour terminer les modifications.');
            ModalResult := mrOk;
          except
            Showmessage('Votre compte n''est pas encore activé.');
          end;
        finally
          Disconnect;
        end;
      end;
      Close;
    end;
    Il ne ce pass rien !! l'application ne redémarre pas...

    Et je vois pas pourquoi ?

    Un petit coup de main ?

    Merci.

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 753
    Points : 13 338
    Points
    13 338
    Par défaut
    Il ne ce pass rien !! l'application ne redémarre pas...
    Mais est-ce que la première se termine ?

    Essaye déjà simplement de démarrer une 2ème instance de ton application par ShellExecute.
    Si elle ne démarre pas, as-tu un mutex pour limiter ton programme à une instance ?
    Si oui, tu devrais le libérer avant ShellExecute.

    ps: Un Close de la fiche principale entraîne un Terminate de l'application. Terminate n'est pas utile dans le OnClose. Par contre, tu pourrais l'utiliser depuis le fiche secondaire pour terminer le programme sans passer par la fiche principale.

  9. #9
    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 Andnotor,

    Alors, en fait c'est mon close de mon jvxpButton2 qui me génait, mais ce n'ai pas tout.

    L'application et le redémarrage fonctionne mais seulement au deuxième clique sur mon boutton de ma deuxieme form !!! comme si il ne prenait mon modalresult qu'a ce moment là !!

    Ok pour le terminate.
    Tu dis de le mettre (terminate) t'en cas faire dans ma deuxième form, mais j'ai des query et table et form qui peuvent être ouvertes dans ma form principal et dans le close je ferme tout avant de couper, j'ai peur des fuites de mémoire si je fais un terminate dans cette fenêtre ?

    Qu'en penses-tu ?

  10. #10
    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 : 42
    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
    moi j'ai une variable needrestart a false dans le create

    mes sauvegarde etc dans le onclosequery et onclose

    et dans le destroy si needrestart à true je lance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Procedure TfmMain.FormDestroy(Sender: TObject);
    Begin
      If NeedRestart Then
        ShellExecute(Application.Handle, 'open', PChar(Application.ExeName), '', '', SW_SHOW);
    End;
    j'ai jamais eu de soucis je met ma variable à true et j'appèle close;

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

Discussions similaires

  1. Comment faire un splash screen pour son application?
    Par tscoops dans le forum C++Builder
    Réponses: 4
    Dernier message: 26/04/2007, 14h28
  2. Réponses: 20
    Dernier message: 06/12/2005, 15h19
  3. Protection de son application
    Par FFF dans le forum Sécurité
    Réponses: 14
    Dernier message: 22/11/2005, 14h55
  4. Comment protéger efficacement son application ?
    Par RamDevTeam dans le forum EDI
    Réponses: 3
    Dernier message: 15/11/2005, 09h41
  5. Comment redémarrer une application?
    Par liv dans le forum MFC
    Réponses: 5
    Dernier message: 24/01/2005, 14h40

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