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 :

Enchainer sur un autre exécutable


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Par défaut Enchainer sur un autre exécutable
    Je voudrais que l'application sur laquelle je suis se ferme et soit remplacée par un autre exécutable.

    J'ai écrit le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        If ShellExecute(0,'OPEN', PChar(AExe), Nil, Nil, SW_SHOW) > 0 Then Begin
           Result := True;
           Application.Terminate;
        End
        Else
    Ca fonctionne correctement dans 99% des cas mais je viens d'avoir un cas où la seconde application a bien été lancée mais ou la première ne s'est pas refermée.
    Quelle autre solution peut-il exister que ShellExecute ?

  2. #2
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Par défaut
    WinExec.

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Par défaut
    Winexec est obsolète. il vaudrait mieux utiliser shellExecute
    En recherche j'avais trouvé ceci.

  4. #4
    Membre émérite Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Par défaut
    Salut,

    utilise des threads, au moins tu seras sur que ton processus est terminé.

    Et comme c'est mon jour de bonté, je vais même te donner un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm18.FormHide(Sender: TObject);
     var  SI: STARTUPINFO;
         PI: PROCESS_INFORMATION;
    begin
       ZeroMemory(@si,sizeof(STARTUPINFO)); //remplir si avec de zeros
       Si.dwFlags := STARTF_USESHOWWINDOW;
       Si.wShowWindow := SW_SHOWNORMAL;
       CreateProcess(nil,'Le chemin de ton executable',
    nil,nil,True,0,nil,nil,Si,Pi);
     
       WaitForSingleObject(pi.hProcess,INFINITE);
       MESSAGEBOX(handle,'C''est fini!!','fin',mb_OK);
    end;
    En espérant que ça t'aide.

    @+.

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Par défaut
    Merci PadawanDuDelphi.
    Si j'ai bien compris le code l'application appelle un exécutable et attend qu'il soit terminé pour continuer.

    Ce que je cherche à faire est différent :
    J'ai une application qui détecte q'une nouvelle version est disponible.
    Elle lance le Setup d'installation de la nouvelle version
    Elle se referme aussitôt.

    Ce matin sur un poste elle ne s'est pas refermée et le Setup d'installation a bloqué sur elle.
    D'ou ma question sur le forum
    il y avait en Basic une instruction qui s'appelait Chain et qui remplaçait un exécutable par un autre. C'est un peu ce que je cherche à faire.

    Je conserve l'exemple de code car j'en aurai besoin pour autre chose mais comme
    c'est mon jour de bonté
    j'en profite.

  6. #6
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    a priori il faut juste retirer cette ligne il me semble

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WaitForSingleObject(pi.hProcess,INFINITE);
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  7. #7
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Citation Envoyé par PadawanDuDelphi
    Salut,

    utilise des threads, au moins tu seras sur que ton processus est terminé.

    Et comme c'est mon jour de bonté, je vais même te donner un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm18.FormHide(Sender: TObject);
     var  SI: STARTUPINFO;
         PI: PROCESS_INFORMATION;
    begin
       ZeroMemory(@si,sizeof(STARTUPINFO)); //remplir si avec de zeros
       Si.dwFlags := STARTF_USESHOWWINDOW;
       Si.wShowWindow := SW_SHOWNORMAL;
       CreateProcess(nil,'Le chemin de ton executable',
    nil,nil,True,0,nil,nil,Si,Pi);
     
       WaitForSingleObject(pi.hProcess,INFINITE);
       MESSAGEBOX(handle,'C''est fini!!','fin',mb_OK);
    end;
    En espérant que ça t'aide.

    @+.
    @padawan : Je crois que tu n'as pas compris sa question.
    Le problème vient du fait que sa première application ne se ferme pas après avoir lancer la 2em, les threads n'y pourront rien si la première application ne se ferme pas.

    @delphi-ne : Je pense pas que tu puisses faire grand chose à cela, si ta première application ne se ferme pas, c'est que tu as eu une erreur (violation d'accès ou autre) lors de la fermeture du programme et pour gérer cela en automatique ca va être difficile (des try finally et/ou Except ?).

    Puis bon , tu n'auras jamais 100% de chance que l'application se ferme à chaque fois, il existera toujours un cas qu'y fera en sorte que ton application ne se ferme pas.

    C'est pas bien 99% ?
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Par défaut
    Le forum étant par définition public je ne peux pas rapporter ici toutes les choses gentilles que mon utilisateur à dites quand il s'est touvé dans le 1%.

    Pourtant je teste bien que le shellexecute ne retourne pas d'erreur donc je ne comprends pas.
    L'essentiel que je recherchais ici est de ne pas avoir zappé une possibilité techniques

Discussions similaires

  1. Réponses: 5
    Dernier message: 04/01/2008, 09h55
  2. Réponses: 8
    Dernier message: 18/03/2007, 02h28
  3. exécution d'un programme compilé sur une autre machine
    Par haorua1983 dans le forum Administration système
    Réponses: 4
    Dernier message: 09/02/2007, 17h25
  4. Jar excutable problématique sur une autre machine
    Par lars528 dans le forum Général Java
    Réponses: 8
    Dernier message: 23/08/2006, 10h49
  5. Exécutable sur un autre PC
    Par Yphon dans le forum Langage
    Réponses: 6
    Dernier message: 13/01/2006, 21h33

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